May 30

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:

ASP:
  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:

VB.NET:
  1. Protected Sub Acceso_LoggedIn(ByVal sender As Object, ByVal e As System.EventArgs) Handles Acceso.LoggedIn
  2.         Dim ElLogin As Login
  3.         ElLogin = CType(sender, 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.

May 22

Utilizando ASP.NET 3.5 y AJAX me encontré con la siguiente excepción:

Sys.WebForms.PageRequestManagerParserErrorException: The message received from the server could not be parsed. common causes for this error are when the response is modified by calls to Response.Write(), response filters, HttpModules, or server trace is enabled.

sys.gif

Para solucionarlo simplemente agrega una sección triggers a tu updatepanel referenciando al botón que envía el formulario. Así:

ASP:
  1. <asp:UpdatePanel ID="UpdatePanel1" runat="server">
  2.    <Triggers>
  3.       <asp:PostBackTrigger ControlID="MiBoton" />
  4.    </Triggers>
  5.    <ContentTemplate>
  6.    ...tu contenido aquí...
  7.    </ContentTemplate>
  8. </asp:UpdatePanel>

Normalmente esto siempre funciona, pero si no, visita esta página que contiene toda la explicación completa y más opciones de resolución.