70-528. Resumen. Controles

Segunda parte del resumen sobre el temario para el examen de certificación 70-528 para desarrollo web.


CallBack: Llamada al servidor.

RoundTrip: Ciclo que comprende desde la llamada que realiza el cliente al servidor, hasta el proceso de la respuesta del servidor por parte del cliente.

VieState: Mecanismo que permite a las páginas asp.net mantener información de estado entre llamadas a las páginas.

Ciclo de vida de la página (orden de ejecución de los eventos)
LoadControlState->LoadViewState->LoadPostData->Load(OnLoad)->RaisePostDataChangedEvent(ejecución de eventos pendientes)->RaisePostBackEvent(ejecución del evento que ha disparado el postback)->PreRender(OnPreRender)->SaveControlState->SaveViewState->Render->Dispose->UnLoad

En cuanto a eventos propiamente dichos, he hecho la siguiente prueba, y este ha sido el resultado:

En una Página cualquiera: He creado funciones para cada uno de los eventos posibles de la clase SystemWeb.UI.Page con el formato Page_<NombreEvento> para los eventos siguientes:
Load
PreInit
PreLoad
PreRender
PreRenderComplete
LoadComplete
InitComplete
Init
SaveStateComplete
UnLoad

En el archivo aspx he puesto la directiva AutoEventWireup="true" para que el compilador entienda que las funciones que tengan firma de tipo EventHandler* y que sigan la directiva de nombrado Page_<NombreEvento> son en efecto, procedimientos de evento de la página.

* He probado crear las funciones sin parámetros y funciona igual. Luego he probado poner un parámetro object pepito y no ha funcionado. Finalmente he probado definir las funciones sin parámetros y con valor de retorno bool y tampoco ha funcionado. Lo que me induce a pensar que la directiva AutoEventWireup engancha a  las funciones que devuelvan void y no tengan parámetros, o tengan los parámetros de EventHandler.

public partial class _Default : System.Web.UI.Page 
{
    private void Page_Load(object sender, EventArgs e)
    {
        System.Diagnostics.Debug.WriteLine("Page_Load");   
    }
    private void Page_PreInit(object sender, EventArgs e)
    {
        System.Diagnostics.Debug.WriteLine("Page_PreInit");
    }
    private void Page_PreLoad(object sender, EventArgs e)
    {
        System.Diagnostics.Debug.WriteLine("Page_PreLoad");
    }
    private void Page_PreRender(object sender, EventArgs e)
    {
        System.Diagnostics.Debug.WriteLine("Page_PreRender");
    }
    private void Page_PreRenderComplete(object sender, EventArgs e)
    {
        System.Diagnostics.Debug.WriteLine("Page_PreRenderComplete");
    }
    private void Page_LoadComplete(object sender, EventArgs e)
    {
        System.Diagnostics.Debug.WriteLine("Page_LoadComplete");
    }
    private void Page_InitComplete(object sender, EventArgs e)
    {
        System.Diagnostics.Debug.WriteLine("Page_InitComplete");
    }
    private void Page_Init(object sender, EventArgs e)
    {
        System.Diagnostics.Debug.WriteLine("Page_Init");
    }
    private void Page_SaveStateComplete(object sender, EventArgs e)
    {
        System.Diagnostics.Debug.WriteLine("Page_SaveStateComplete");
    }
    private void Page_Unload(object sender, EventArgs e)
    {
        System.Diagnostics.Debug.WriteLine("Page_Unload");
    }
}

Al ejecutarlo, produce la siguiente salida en la ventana de deupuración:
Page_PreInit
Page_Init
Page_InitComplete
Page_PreLoad
Page_Load
Page_LoadComplete
Page_PreRender
Page_PreRenderComplete
Page_SaveStateComplete
Page_Unload

Que en efecto, es el orden de ejecución de los eventos de la página.

Menos InitComplete, LoadComplete, PreInit, PreRenderComplete y SaveStateComplete, los demás, son heredados de Control y de TemplateControl.

Dejo para más adelante una prueba de la ejecución de los eventos de la página y de sus controles componentes.

http://msdn2.microsoft.com/es-es/library/system.web.ui.page_events(VS.80).aspx

 

image 

Jerarquía de controles ASP.net

  • System.Web.UI.Control
    • WebControl
    • HtmlControl
    • TemplateControl
      • Page
    • LiteralControl
    • OtherSpecializedControls

Jerarquía de HTML Server Controls

image 

  • System.Web.UI.Control
    • System.Web.UI.HtmlControl
      • HtmlContainerControl
        • HtmlGenericControl
      • HtmlImage
      • HtmlInputControl
        • HtmlInputHidden
        • HtmlInputButton
          • HtmlInputSubmit
          • HtmlInputReset
        • HtmlInputText
      • HtmlLink

Los HTML Server control han sido creados principalmente para permitir una migración sencilla de aplicaciones HTML o ASP a ASP.net. La manera de realizar la migración es añadir el atributo runat="server" a cada control y eliminar el action del form.

Los HTML Server control deben estar ubicados dentro de la etiqueta form con runat="server". Sólo puede existir una etiqueta de este tipo en una página ASP.net.

La propiedad Visible de un HTML Server control indica si el control debe renderizarse o no. Si es false, no se renderiza. Este comportamiento quizá pueda inducir a la creencia errónea de que el control se renderiza con el atributo visible a false.
Hay que recordar que si el control no se renderiza, y existe código cliente (JavaScript, JScript, VBScript, etc.) que referencia a dicho control, es posible que falle.

Jerarquía de Web Server Controls

ClassDiagram1

  • System.Web.UI.Control
    • System.Web.UI.WebControl
      • Button
      • Label
      • CheckBox
      • TextBox
      • Image
      • BaseDataBoundControl
        • DataBoundControl
          • AdRotator
          • ListControl
            • DropDownList
            • ListBox
          • CompositeDataBoundControl
            • GridView

System.Web.HttpUtility.HtmlEncode : http://msdn2.microsoft.com/es-es/library/system.web.httputility.htmlencode(VS.80).aspx
System.Web.HttpUtility.Decode: http://msdn2.microsoft.com/es-es/library/system.web.httputility.htmldecode(VS.80).aspx
permiten el tratamiento de cadenas que contienen código html.

La propiedad DescriptionUrl del control Image, permite especificar un archivo html en el que insertar descripción detallada adicional al texto alternativo (propiedad AlternateText). Usar el método GenerateEmptyAlternateText para establecer el atributo alt="", lo que desde la perspectiva de la accesibilidad, indica que la imagen no contribuye al significado de la página, si no que más bien se usa con objeto de presentación (píxeles transparentes, bordes de contornos, etc.)

En las rutas de archivos o carpetas, la tilde (~) indica que la ruta es relativa al directorio de la aplicación.

Jerarquía de controles de acceso a datos de Asp.net:

  • System.Web.UI.Control
    • DataSourceControl (IDataSource, IListSource)
      • ObjectDataSource
      • SqlDataSource
        • AccessDataSource
    • HierarchicalDataSourceControl (IHierarchicalDataSource)
      • XmlDataSource (IDataSource, IListSource)
      • SiteMapDataSource (IDataSource, IListSource)

System.Web.UI.ListControl.AppendDataBoundItems indica si los elementos de la lista se borran antes del enlace a datos.

Controles Asp.net

LiteralControl: Sirve para mostrar contenido estático.

Table: Se renderiza como una tabla HTML. La gracia está en que esta tabla se puede generar dinámicamente desde el lado del servidor.

Image: Una imagen cualquiera.

ImageButton: Un botón que en lugar de mostrar el botón clásico, es una imagen.

ImageMap: Un control que permite trabajar con mapas de imágenes.

Calendar: Lo que me ha parecido más destacable de este control es que no sólo sirve para seleccionar fechas, sino también para mostrar elementos en un calendario. Permite selección de múltiples fechas.

FileUpload: Permite subir al servidor archivos sin un límite de tamaño máximo. El botón de selección de archivo no provoca PostBack.

Panel: Sirve para agrupar controles que se desean mostrar, ocultar o posicionar como uno solo. Se renderiza como un div.

MultiView: Permite manejar en un único control varias vistas (algo así como paneles). Varios conjuntos de controles que se mostrarán, ocultarán o posicionarán conjuntamente.

Wizard: Algo parecido al MultiView. Pensado para representar asistentes de varios pasos.

Controles Asp.net enlazados a datos

DataBindind con Templates: Algunos controles enlazados a datos permiten que la representación de los datos se realice mediante plantillas. Estas plantillas son las que se irán renderizando para cada uno de los datos del origen de datos al que se ha enlazado. El contenido de la plantilla puede ser HTML, controles asp.net, etc.
El mecanismo para indicar la inclusión de los valores del elemento mostrado viene proporcionado por la clase DataBinder. Esta clase posee el método estático Eval que es el que devuelve el valor de la propiedad o la columna correspondiente a elemento actual. La llamada a este método se realiza mediante la siguiente expresión (dentro de la plantilla):

<%# Bind("Id") %>

AccessDataSource: Permite a los controles enlazables a datos, obtenerlos desde una base de datos en un archivo mdb.

SqlDataSource: Permite acceder bases de datos ODBC, OLEDB, SQL Server, Oracle.

XmlDataSource: Permite acceder a fuentes de datos contenidas en archivos xml.

ObjectDataSource: Permite acceder a datos contenidos en objetos de negocio de la solución; en general cualquier objeto que implemente IEnumerable, IListSource, IDataSource, IHierarchicalDataSource. Permite acceder a objetos DataSet y DataTable.

SiteMapDataSource: Permite exponer el arbol de navegación del sitio, que debe estar definido en un xml con el formato adecuado.

ListControl: Clase abstracta que permite implementar listas de elementos dentro de las páginas. Heredan de esta clase BulletedList, DropDownList, RadioButtonList, CheckBoxList, ListBox.

BulletedListControl: Muestra una lista de elementos dentro de un párrafo señalado con viñetas y o números. Lo que viene siendo una lista identada.

AdRotator: Permite gestionar banners dentro de la página, indicando en un archivo xml las imágenes disponibles, así como la frecuencia con la que deseamos que se muestren.

Xml: Renderiza un documento xml dentro del documento html. Se le puede aplicar un archivo de transformación xslt y  en lugar de renderizar xml, renderiza lo que el xslt especifique.

GridView: El grid de toda la vida. Lo que no cocía de este control es que permite controlar el renderizado de cada celda, con lo cual podríamos pintar cualquier tipo de contenido.

DetailsView: Viene siendo lo contrario que el GridView. Si el GridView muestra listas de registros, DetailsView muestra registros independientes. En cuanto a funcionamiento y características, son bastante parecidas.

FormView: Al igual que DetailsView, muestra registros uno a uno, con la diferencia de que permite especificar mediante plantillas la manera en que se mostrarán los registros.

System.Web.UI.Controls.TreeView: Quizá la característica que más me ha llamado la atención sobre este control es que permite la carga de nodos de manera asíncrona. Ver http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.treeview.populatenodesfromclient.aspx

System.Web.UI.Controls.Menu: Al igual que TreeView, muestra registros de forma jerárquica. Al igual que TreeView, sólo enlaza a DataSources jerárquicos, que implementen IHierarchicalDataSource.

Filed under: ,

Comments

No Comments