En el post pasado (míralo acá) vimos como crear un control de usuario, así que en el post de hoy revisaremos otra característica que va a permitir manejar un determinado evento del control de usuario pero en la página que lo contiene. Esto va a permitir crear un “cascaron del control” y utilizarlo desde diferentes páginas y en cada una implementar la lógica necesaria.

Pero como podemos realizar lo anterior? vamos a ir paso por paso implementando dicha funcionalidad en el control de usuario para el registro:

1. Clase para compartir información:

Vamos a crear una clase la cual va a contener la información que queremos compartir entre el control de usuario y la página que lo contiene, así la página contenedora no va a tener que acceder directamente al control, en su lugar accederá a una clase. La clase que se cree debe heredar de EventArgs, entonces si creamos una clase llamada usuario vamos a tener algo como:

1: PublicClass Usuario 2: Inherits EventArgs 3:  4: PublicSubNew(ByVal sNombre AsString, ByVal sApellido AsString, ByVal sUsuario AsString, ByVal sEmail AsString) 5: _spNombre = sNombre 6: _spApellido = sApellido 7: _spUsuario = sUsuario 8: _spEmail = sEmail 9: EndSub 10:  11: PublicProperty spNombre AsString 12: PublicProperty spApellido AsString 13: PublicProperty spUsuario AsString 14: PublicProperty spEmail AsString 15:  16: PublicOverridesFunction ToString() AsString 17: Dim infoUsuario AsNew StringBuilder() 18: infoUsuario.Append("Nombre: " & spNombre & "
"
) 19: infoUsuario.Append("Apellido: " & spApellido & "
"
) 20: infoUsuario.Append("Usuario: " & spUsuario & "
"
) 21: infoUsuario.Append("Email: " & spEmail & "
"
) 22: Return infoUsuario.ToString() 23: EndFunction 24:  25: End Class

2. Evento público:

En el code behind del control de usuario se debe declarar un evento público, en donde el segundo parámetro será un objeto de tipo de la clase creada anteriormente:

1: PublicEvent RegistrarUsuario(ByVal sender AsObject, ByVal e As Usuario)

3. Evento del control:

En el code behind del control de usuario, más específicamente en el evento del control que se desea delegar a la página contenedora creamos una instancia de la clase que vamos a utilizar para compartir información y especifícanos el nombre del evento público creado,para nuestro caso el evento click del botón registrar:

1: ProtectedSub btnRegistrar_Click(sender AsObject, e As EventArgs) Handles btnRegistrar.Click 2: Dim nuevoUsuario AsNew Usuario(sNombre:=txtNombre.Text, 3: sApellido:=txtApellido.Text, 4: sUsuario:=txtUsuario.Text, 5: sEmail:=txtEmail.Text) 6: RaiseEvent RegistrarUsuario(Me, nuevoUsuario) 7: End Sub

4. Manejando el evento:

Finalmente al agregar el control de usuario a una página aspx, el control de usuario dentro de sus eventos ahora dispone de uno llamado RegistrarUsuario, lo interesante de ese evento es que en la firma del mismo en el segundo parámetro disponemos de un objeto de tipo de la clase que creamos para compartir la información, por lo tanto podemos acceder a las propiedades de dicha clase con sus respectivos valores, para el ejemplo, vamos a mostrar en un label el nombre y el apellido:

1: Private Sub RegistrarUsuario_RegistrarUsuario(sender As Object, e As Usuario) Handles RegistrarUsuario.RegistrarUsuario 2: lblMensaje.Text = "Usuario Registrado: " & e.spNombre & " " & e.spApellido 3: End Sub

Claro la idea es implementar algo más complejo, como sería el registro del usuario en la base de datos. Espero les sea interesante el artículo. Les dejo el código del ejemplo:

Ejemplo en VB!

Ejemplo en C#!