Cómo modificar datos del MembershipUser

Si deseas modificar información del MembershipUser utiliza el siguiente ejemplo, en el cual vamos a modificar únicamente el email:

  1. Try
  2.     Dim ElUsuario As MembershipUser = Membership.GetUser(NombreUsuario.Text)
  3.     ElUsuario.Email = Email.Text
  4.     Membership.UpdateUser(ElUsuario)
  5. Catch ex As Exception
  6.     'Con ex.Message puedes desplegar los errores, por ejemplo en un label
  7.     'para darte cuenta si algo va mal al intentar la modificacion
  8. End Try

Cómo utilizar MembershipUser.ChangePassword

Si quieres modificar la contraseña de un usuario de tu Membership utiliza el método ChangePassword:

  1. Try
  2.     Dim NuevaContrasena as String = "nueva"
  3.     Dim Usuario as String = "jperez"
  4.     Dim ElUsuario As MembershipUser = Membership.GetUser(Usuario)
  5.     ElUsuario.ChangePassword(ElUsuario.ResetPassword(), NuevaContrasena )
  6. Catch ex As Exception
  7.     'Con ex.Message puedes desplegar los errores, por ejemplo en un label
  8.     'para darte cuenta si algo va mal al intentar la modificacion
  9. End Try

El ejemplo anterior sirve para modificar la contraseña sin conocerla, por ejemplo, para un módulo de un administrador que puede modificar contraseñas de usuarios.

Sin embargo, si lo que buscas es un módulo en el cual el propio usuario modifique su contraseña, y para añadir seguridad quieres que la persona tenga que poner su actual contraseña y su nueva contraseña, entonces simplemente llama la función de esta manera:

  1. Dim Resultado As Boolean = ElUsuario.ChangePassword(ContrasenaActual.Text, Contrasena.Text)

ContrasenaActual es un TextBox en el cual solicitas la contraseña actual.
Contrasena es un TextBox en el cual solicitas la contraseña nueva.

Si Resultado es True, quiere decir que el usuario tecleó su contraseña actual correctamente y se hizo el cambio de contraseña. Si es False entonces tecleó incorrectamente su contraseña actual y no se hizo la modificación.

Cómo redirigir a un usuario a diferentes páginas de acuerdo a su Rol

Si tienes una aplicación usando Membership con varios Roles y necesitas redirigir al usuario a diferentes páginas de acuerdo al rol en el que se encuentra utiliza el siguiente código.

Este es tu control Login en tu página:

  1. <asp:Login ID="Acceso" runat="server" BorderPadding="8"  
  2.     DisplayRememberMe="False"
  3.     FailureText="Datos inválidos, por favor inténtelo de nuevo."
  4.     LoginButtonText="Entrar" LoginButtonType="Button"
  5.     PasswordLabelText="Contraseña:" TitleText=""
  6.     UserNameLabelText="Nombre de usuario:"
  7.     DestinationPageUrl="">
  8.     <ValidatorTextStyle CssClass="Validador" ForeColor="" />
  9.     <FailureTextStyle CssClass="Validador" ForeColor="" />
  10.     <TitleTextStyle CssClass="Titulo" Font-Bold="True" HorizontalAlign="Left" />
  11.     <TextBoxStyle Font-Bold="False" />
  12.     <LoginButtonStyle Font-Bold="False" />
  13.     <LabelStyle Font-Bold="True" HorizontalAlign="Left" />
  14.     <CheckBoxStyle HorizontalAlign="Right" />
  15. </asp:Login>

Este es el código para realizar la redirección:

  1. Protected Sub Acceso_LoggedIn(ByVal sender As Object, ByVal e As System.EventArgs) Handles Acceso.LoggedIn
  2.     Dim ElLogin As System.Web.UI.WebControls.Login
  3.     ElLogin = CType(sender, System.Web.UI.WebControls.Login)
  4.     If Roles.IsUserInRole(ElLogin.UserName, "Administrador") = True Then
  5.         Response.Redirect("~/Administrador/Default.aspx")
  6.     Else
  7.         If Roles.IsUserInRole(ElLogin.UserName, "UsuarioRegular") = True Then
  8.             Response.Redirect("~/Usuario/Default.aspx")
  9.         End If
  10.     End If
  11. End Sub

Importante: Es muy probable que tu página de inicio de sesión se llame “Login.aspx”, si haces eso, entonces la clase de la página llevará el nombre de “Login”, y esto se confunde con la clase del control “Login”. Si no funciona el código anterior quizás tengas este problema, solamente renombra tu página (lo más importante es renombrar su clase) a cualquier otra cosa, por ejemplo: PaginaLogin o Default.

Cómo copiar un valor de un TextBox a otro usando ASP.NET y JavaScript

La situación es esta:

Tengo dos controles TextBox de ASP.NET en un formulario de captura. En la mayorí­a de los casos el usuario deberá capturar el mismo valor en ambos. Entonces quiero hacer que cuando el usuario capture el primer campo y brinque al segundo (en ese momento se dispara el evento onblur de JavaScript del primer campo) el valor capturado se copie automáticamente al segundo campo.

Para hacer esto hay que combinar el uso de ASP.NET con JavaScript de la siguiente forma.

Primero crea la función VB.NET que genera el código JavaScript:

  1. Public Function SetText(ByVal Control1 As Control, ByVal Control2 As Control) As String
  2.     'Genera codigo JavaScript que copiara el contenido del campo Control1
  3.     'al campo Control2 en el momento que el usuario salga (onblur) del Control1
  4.     Dim Script As New System.Text.StringBuilder
  5.     Dim ClientID1 As String = Control1.ClientID
  6.     Dim ClientID2 As String = Control2.ClientID
  7.     With Script
  8.         .Append("document.getElementById('")
  9.         .Append(ClientID1)
  10.         .Append("').value = ")
  11.         .Append("document.getElementById('")
  12.         .Append(ClientID2)
  13.         .Append("').value;")
  14.     End With
  15.     Return Script.ToString
  16. End Function

La función anterior puede ir en el código de tu página. Ahora, en el evento Page_Load puedes usarla así:

  1. MiTextBox1.Attributes.Add("onblur", SetText(MiTextBox1, MiTextBox2))

Código creado basándome en: http://www.mredkj.com/vbnet/TextboxScriptFunctions.html

Tres diferentes formas de hacer DataBind en ASP.NET 3

Existen tres formas de hacer DataBind en ASP.NET 3:

Eval. Es un DataBind en una sola dirección, lo que significa que obtiene el dato del DataSource pero si ocurre alguna modificación en el campo, no lo puede regresar al DataSource.

Ejemplo:

  1. <%#Eval("NombreDeLaColumna")%>

Bind. Es un DataBind de dos direcciones, lo que significa que obtiene el dato del DataSource y si ocurre alguna modificación en el campo, lo regresa al DataSource para su modificación.

Ejemplo:

  1. <%#Bind("NombreDeLaColumna")%>

Uso de una función. Es posible utilizar una función para mostrar un dato. Toma esta situación por ejemplo: En la tabla que estamos mostrando tenemos una llave foránea, que hace la relación con otra tabla. En vez de mostrar el ID numérico (por ejemplo 34) es mejor mostrar un campo alfanumérico, pero ese campo alfanumérico se encuentra en la otra tabla. Para accederlo puedes crear una función a la cual le des como entrada el ID numérico y regrese el valor alfanumérico legible para el usuario.

Ejemplo:

  1. <%# Funciones.ObtenDatoAlfanumerico(Eval("IdTabla")) %>

Es muy útil saber esto, sobre todo el tercer ejemplo.