Marcos de Desarrollo Diseño e implementación de aplicaciones Web con .NET Objetivos Conocer los tipos de controles de servidor existentes en ASP.NET Conocer los controles de tipo Web Controls y sus propiedades y eventos Saber realizar validación de la entrada usando controles de validación de ASP.NET Controles de servidor Son clases en el .NET Framework que representan elementos visuales en un Web Form (un botón, un campo de texto, un checkbox, etc.) Se ejecutan en el lado del servidor Poseen el atributo runat="server" Pueden mantener su “estado” entre “PostBacks” Para esto hacen uso del atributo ViewState Se distinguen dos tipos de controles de servidor HTML Controls Web Controls Caja de herramientas de controles (Ctrl+Alt+X) ¿Cómo se definen los controles? Dos opciones: a) Pueden ser arrastrados directamente de la barra de herramientas a la vista de diseño o a la vista de código (de una página .aspx) b) Pueden definirse directamente en la vista de código IntelliSense y Code Snippets ayudan con los diferentes tags y atributos Propiedades y eventos de un control propiedades eventos (sólo Web Controls) Tipos de controles de servidor Jerarquía de controles de servidor (Extraído de: MacDonald, 2010) Propiedades de System.Object.Control ClientID: Identificador único, creado por ASP.NET cuando se instancia la página Controls: Colección de controles EnableViewState: indica si el control debería mantener su estado entre peticiones (true por defecto) ID: identificador del control. Es el nombre a través del cual se puede acceder al control desde código. Page: referencia a la página que contiene el control Parent: referencia al "padre" del control (puede ser la página u otro control) Visible: indica si el control debe renderizarse Métodos de System.Object.Control DataBind(): enlaza el control con un DataSource FindControl(): busca un control con un nombre determinado, en el control actual y en sus "hijos" HasControls(): indica si el control tiene controles "hijo" RenderControl(): genera HTML de salida para el control (no se puede llamar directamente, lo hace ASP.NET HTML Controls Se corresponden con elementos HTML estándar Por defecto, los elementos HTML no son accesibles desde código del lado del servidor Desde CodeBehind no es posible acceder a sus propiedades (modificar el texto de un botón, leer el estado de las casillas de un Checkbox, …) Pestaña HTML en la Caja de herramientas HTML Controls ASP.NET permite "convertir" elementos existentes en HTML (e.g. button, radio, checkbox, text, …) en "controles de servidor", simplemente añadiendo los atributos: runat="server" id A partir de ese momento, es posible acceder al control desde el lado del servidor Se encuentran definidos como objetos dentro del Namespace System.Web.UI.HtmlControls HTML Controls <input type="text"/> pagina.html (o .aspx) <input type="text" id="txtName" runat="server"/> Transformamos el elemento HTML en control de servidor HTML pagina.aspx txtName.BackColor = System.Drawing.Color.Grey; String userName = txtName.Value; pagina.aspx.cs Ahora, es posible acceder a las propiedades del control desde CB Web Controls Accesibles del lado del servidor Poseen mayor funcionalidad Son del tipo <asp:nombre_control> No tienen relación 1:1 con elementos HTML Un Web Control puede generar varios elementos HTML al "renderizarse" Se encuentran definidos como objetos dentro del Namespace System.Web.UI.WebControls Web Controls Tipos de WebControls Standard De acceso a datos De validación De navegación … Web Controls Ejemplo: <asp:TextBox ID="TextBox1" runat="server"> </asp:TextBox> pagina.aspx this.TextBox1.Text = "Texto establecido en Code-Behind"; pagina.aspx.cs Principales Web controls (1 de 2) Web Control HTML generado Principales props. y events. <asp:Button> <input type="submit"> o <input type="button"/> Text, CausesValidation, PostBackUrl, ValidationGroup, evento Click <asp:CheckBox> <input type="checkbox"> AutoPostBack, Checked, Text, TextAlign, evento CheckedChanged <asp:HyperLink> <a href="…"> </a> ImageUrl, NavigateUrl, Target, Text <asp:Image> <img src="…" /> AlternateText, ImageAlign, ImageUrl <asp:ImageButton> <input type="image"> CausesValidation, ValidationGroup, evento Click <asp:Label> <span> </span> Text, AssociatedControlID <asp:LinkButton> <a><img/></a> Text, CausesValidation, ValidationGroup, evento Click <div> </div> BackImageUrl, DefaultButton, GroupingText, HorizontalAlign, Scrollbars, Wrap <asp:Panel> Principales Web controls (2 de 2) Web Control HTML generado Principales props. y events. <asp:RadioButton> <input type="radio"> AutoPostBack, Checked, GroupName, Text, TextAlign, evento CheckedChanged <asp:Table> <table> </table> BackImageUrl, CellPadding, CellSpacing, GridLines, HorizontalAlign, Rows (collection) <asp:TableCell> <td>...</td> ColumnSpan, HorizontalAlign, RowSpan, Text, VerticalAlign, Wrap <asp:TableRow> <tr>...</tr> Cells (collection), HorizontalAlign, VerticalAlign <asp:TextBox> <input type="text"/> o <textarea>...</textarea> AutoPostBack, Columns, MaxLength, ReadOnly, Rows, Text, TextMode, Wrap, evento TextChanged Propiedades comunes a todos los Web Controls Además de los atributos ID y runat, otras propiedades comunes son CssClass: define el atributo HTML class. Este nombre apunta a una clase CSS definida en la página o en un archivo externo Enabled: determina si el usuario puede interactuar con el control en el navegador. Por ejemplo, en un TextBox desabilitado no se puede modificar el texto TabIndex: fija el atributo HTML tabindex que determina el orden en el que los usuarios pueden moverse a través de los controles en la página pulsando la tecla Tab Tooltip: permite fijar un tooltip para el control, que se renderiza como un atributo title en el HTML Visible: determina si el control se envía o no al navegador (no sólo no se muestra, si no que ni siquiera se envía) Otras propiedades comunes son BackColor, BorderColor , BorderStyle, BorderWidth, Font , ForeColor, Height, Width, relacionadas con el estilo El HTML resultante contiene atributo style (resulta fácil de portar a CSS) Es recomendable utilizar CSS en una hoja externa Web Controls Las propiedades comunes facilitan la programación <asp:RadioButton ID="rbtRadioButton" runat="server" BackColor="red" Text= "..." /> <asp:CheckBox ID="chkCheckBox" runat="server" BackColor="red" Text= "..." /> Cada control puede incluir adicionalmente propiedades específicas <asp:CheckBox ... Checked="true"/> Generan HTML acorde al navegador que llama a la página. Para el CheckBox definido, se genera el HTML: <span style="background-color:Red;"> <input id="chkCheckBox" type="checkbox" name="chkCheckBox" checked="checked" /> </span> Web Controls de validación Diseño e implementación de aplicaciones Web con .NET Web Controls de Validación Son elementos ocultos que validan las entradas de datos contra algún patrón Validación en el lado del cliente Permite avisar al usuario antes de enviar los datos al servidor. Es más rápido y ahorra recursos Implica generar código del lado del cliente (JavaScript) Los controles de validación de ASP.NET lo hacen automáticamente Esta validación es opcional, aunque está activada por defecto Validación en el lado del servidor Independientemente de si los datos han sido validados en el lado del cliente o no, ASP.NET repite la validación en el lado del servidor por razones de seguridad (un atacante podría saltar la validación del lado del cliente) Web Controls de Validación ASP.NET proporciona 6 controles RequiredFieldValidator. Comprueba que el control que tiene que validar no está vacío en el momento de enviar el formulario (submit) RangeValidator. Valor dentro de un rango de tipos. CompareValidator. Valida contra un valor constante o contra otro control (mayor qué, menor qué, …) RegularExpressionValidator. Valida contra un patrón o expresión regular CustomValidator. Permite definir una validación personalizada desde el lado del cliente y su correspondiente validación del lado del servidor. ValidationSummary. No es un validador en sí mismo. Muestra de forma agrupada los mensajes de error generados por otros controles Pestaña "Validation" en la caja de herramientas La clase BaseValidator Los controles de validación se encuentran en System.Web.UI.Controls Extienden la clase BaseValidator. Esta clase define la funcionalidad básica de un control de validación: ControlToValidate: indica el control a validar Display: indica cómo se muestra el mensaje de error Static, el espacio para mostrar el mensaje se reserva Dynamic, la página cambiará dinámicamente para mostrar el mensaje de error EnableClientScript: propiedad booleana que especifica si se realizará validación del lado del cliente o no Enabled. Propiedad booleana que permite habilitar o deshabilitar el validador La clase BaseValidator Extienden la clase BaseValidator. Esta clase define la funcionalidad básica de un control de validación (cont.): ErrorMessage: cadena que se muestra en el resumen de errores utilizado por el control ValidationSummary Text: cadena que se muestra en el control de validación si la validación falla IsValid: determina si el valor del control asociado es válido SetFocusOnError: si es true, el navegador cambia el foco al control que falló en la validación (el primero en la secuencia Tab, si hay varios) ValidationGroup: permite agrupar validadores y realizar la validación por grupo (útil si hay varias secciones en la página, cada una con opción de submit) Validate(): este método efectúa nuevamente la validación y actualiza el valor de la propiedad IsValid. La página web llama a este método cuando una página realiza un postback debido a un control con CausesValidation="true". Web Controls de Validación Ejemplo: <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="Campo Obligatorio (resumen)" ControlToValidate="TextBox1">Campo Obligatorio </asp:RequiredFieldValidator> <asp:CompareValidator ID="CompareValidator1" runat="server" ControlToValidate="TextBox1" ErrorMessage="CompareValidator" Operator="GreaterThan" ValueToCompare="0">El número debe ser mayor que 0 </asp:CompareValidator> NOTA: los controles de validación pueden configurarse de forma sencilla a través de la ventana "Properties" del VS. Web Controls de Validación Recordar que la validación tiene lugar después de que se cargue la página (Page_Load), pero antes de que sucedan otros eventos (e.g. OnClick) En el manejador del evento, antes de ejecutar el código, se puede comprobar si la página es válida con la propiedad Page.IsValid protected void Button1_Click(object sender, EventArgs e) { if (Page.IsValid) { // codigo a ejecutar... } } Bibliografía Recomendada: M. MacDonald, A. Freeman, M. Szpuszta. Pro ASP.Net 4 in C# 2010. 4th Ed. Apress. 2010.