Tutorial ASP.NET: Controles de usuarios reutilizables
ASP.NET nos provee controles WEB y HTML pero puedes crear tus propios controles personalizados y reutilizables para tu aplicación. Los controles de usuario tiene la extensión .ascx, cuya sintaxis declarativa es similar a la que se emplea para crear páginas web ASP.NET. Hasta el momento usábamos la declarativa “@ Page“ ahora necesitamos usar “@ Control“ para identificarlo como control de usuario personalizado.
Algo muy interesante de los controles de usuarios además que le podemos agregar toda la funcionalidad que queramos, podemos usuarios en cualquier WebForms del sitio y al estar centralizados cualquier modificación que realicemos en nuestros Control se verá reflejado en todo el sitio donde estemos usando el control.
Ejemplo en código de un control de usuario:
Vamos a llamar a nuestro control UCTextBox.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="UCTextBox.ascx.cs" Inherits="UCTextBox" %>
Con la directiva @ Control
ASP.Net
ya entiende que se trata de un control de usuario y su correspondiente CodeBehind llamado UCTextBox.ascx.cs.
Hasta el momento sólo le estamos diciendo a ASP.NET que este es un control de usuario, aún no le indicamos que hará este control. Ahora vamos a agregar un control de servidor “TextBox”
y lo vamos a personalizar.
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
Para que el ejemplo sea sencillo vamos a darle una funcionalidad nueva que el textbox que nos provee ASP.NET no tiene. Determinar si el contenido del TextBox es numérico y hacer algo al respecto.
Vamos a agregar algunas propiedades más al TextBox:
<asp:TextBox ID="TextBox1" runat="server" AutoPostBack="True" ontextchanged="TextBox1_ TextChanged"></asp:TextBox>
Propiedades necesarias para el ejemplo:
ontextchanged="TextBox1_TextChanged"
: como vimos en el capítulo de eventos, vamos a ejecutar ese método cuando cambie el contendido del textbox.AutoPostBack="True"
: al estar seteado en True hace que se realice un postback y vaya al servidor.
Contenido del UCTextBox.ascx.cs
using System; using System.Collections.Generic; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Text; public partial class UCTextBox : System.Web.UI.UserControl { protected void Page_Load(object sender, EventArgs e) { } //Atributo private bool _esnumerico = false; //Propiedad public bool EsNumerico { get { return this._esnumerico; } set { this._esnumerico = value; } } protected void TextBox1_TextChanged(object sender, EventArgs e) { if (this.EsNumerico && !IsNumeric(TextBox1.Text.Trim())) { this.TextBox1.Text = string.Empty; return; } //Metodo publico que evalua si el valor ingresado es numero o no. public bool IsNumeric(object Expression) { bool isNum; double retNum; isNum = Double.TryParse(Convert.ToString(Expression), System.Globalization.NumberStyles. Any, System.Globalization.NumberFormatInfo.InvariantInfo, out retNum); } } } return isNum;
¿Cómo funciona?
Todo está atado a la propiedad pública “bool EsNumerico”
en caso que este seteada en TRUE el control va a responder de determinada manera.
El EventHandler TextBox1_TextChanged
pregunta si EsNumerico es verdadero y además el contenido del textbox no es número entonces limpia el control y no continua con la acción.
protected void TextBox1_TextChanged(object sender, EventArgs e) { if (this.EsNumerico && !IsNumeric(TextBox1.Text.Trim())) { this.TextBox1.Text = string.Empty; return; } }
Ahora vamos a ver como insertar este Control de usuario en un WebForm. De la misma forma que lo hacemos con un Control web lo hacemos con un Control de usuario pero con algunas variantes.Lo primero que debemos hacer es declarar el Control de usuario en el ASPX.
<%@ Register src="UCTextBox.ascx" tagname="UCTextBox" tagprefix="uc1" %>
El tagprefix es importante ya que ese tag reemplazara al asp que tienen los controles web que nos brinda ASP.NET.
<uc1:UCTextBox ID="UCTextBox1" runat="server" />
Ahora en nuestra pagina web veremos implementado el Control de usuario.
¿Qué más nos falta? debemos determinar si la propiedad publica EsNumerico
la dejamos en FALSE
que es como la seteamos por default o en TRUE
para que tome acciones sobre el contenido del textbox.
Agregamos esta línea en el Page_Load
del webform.
this.UCTextBox1.EsNumerico = true;
Muchas veces necesitamos cargar un control de usuario dinámicamente y en tiempo de ejecución. Para ellos usaremos la siguiente sintáxis.
Control MiControl = LoadControl("UCTextBox.ascx");
Capítulos del Tutorial
- Capítulo 1: Tutorial de desarrollo web con ASP.NET
- Capítulo 2: Primera aplicación web en ASP.NET
- Capítulo 3: Ejecutar código JavaScript en ASPNET
- Capítulo 4: Archivos Web.Config y Global.asax
- Capítulo 5: Utilización de Código detrás del modelo o código en línea
- Capítulo 6: Controles de servidor y eventos
- Capítulo 7: Controles de usuarios reutilizables
En el próximo capítulo que se publica el jueves veremos: Crear una página de login, autenticación y seguridad .
[…] Giardina para Maestros del Web.Agrega tu comentario | Enlace permanente al […]
Bueno ps tengo una duda con los controles de inicio de sesion
que son los login,createuserwizard esos son alguno pues la duda rige que cuando yo me creo la cuenta con el createuserwizar este me genera un base datos llamada aspnetdb.mdf
pero yo no quiisera que me genere esa base datos..mas bien con mi base datos misma que yo cree por ejenplo cree mi base datos ususarios y yo kiero que cuando uso el control createuserwizard
este se guarde en mi base datos que yo cree..
por fa si me ayudan con esta gran duda les pido que me agrege a mi correo y de paso conpartimos sabiduaria en la programacion
gracias
mi correo es [email protected]
por fis y gracias
Se agradece este completo tutorial que aunque no hagamos muchos comentarios vamos siguiendo y aprendiendo.
Una petición: ¿sería posible que tabularas el código apra hacerlo un poco más fácil de seguir?
Muchas gracias