Da de alta los MIME Types para las nuevas extensiones de Office

En IIS, en tu sitio web, ve a propiedades, luego a HTTP Headers y haz clic en el botón MIME Types.
Agrega las siguientes:

Extensión, MIME Type


.docm,application/vnd.ms-word.document.macroEnabled.12
.docx,application/vnd.openxmlformats-officedocument.wordprocessingml.document
.dotm,application/vnd.ms-word.template.macroEnabled.12
.dotx,application/vnd.openxmlformats-officedocument.wordprocessingml.template
.potm,application/vnd.ms-powerpoint.template.macroEnabled.12
.potx,application/vnd.openxmlformats-officedocument.presentationml.template
.ppam,application/vnd.ms-powerpoint.addin.macroEnabled.12
.ppsm,application/vnd.ms-powerpoint.slideshow.macroEnabled.12
.ppsx,application/vnd.openxmlformats-officedocument.presentationml.slideshow
.pptm,application/vnd.ms-powerpoint.presentation.macroEnabled.12
.pptx,application/vnd.openxmlformats-officedocument.presentationml.presentation
.xlam,application/vnd.ms-excel.addin.macroEnabled.12
.xlsb,application/vnd.ms-excel.sheet.binary.macroEnabled.12
.xlsm,application/vnd.ms-excel.sheet.macroEnabled.12
.xlsx,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
.xltm,application/vnd.ms-excel.template.macroEnabled.12
.xltx,application/vnd.openxmlformats-officedocument.spreadsheetml.template

Si no agregas las extensiones, entonces si colocas un archivo en tu sitio web, cuando el visitante haga clic en él, el servidor regresará un error, y el visitante no podrá descargarlo. Esto es especialmente importante para el webmail.

Cómo instalar una DLL en el GAC (Global Assembly Cache)

En ocasiones, cuando estás trabajando en Visual Web Developer 2008 con componentes ASP.NET de terceros (third party), notarás que no funciona el Intellisense y además el diseñador marca que tu componente no está definido. Este es un ejemplo de este problema con el componente FreeTextBox:

Component Not Declared

Noté que esto me pasaba por la siguiente razón: Los archivos de mi aplicación están hosteados en un servidor (no en mi PC de desarrollo), por lo que creé una conexión a una unidad de red, asignándola a una letra. Es decir, habí­a mapeado servidorinetpubwwwrootproyecto a w:proyecto. Al parecer si tienes tu servidor web de desarrollo corriendo en tu misma PC, lo anterior no ocurre, pero me parece que es muy probable que trabajes en una PC de desarrollo y accedas a un servidor de desarrollo mediante la red local donde están (y corren) los archivos de tu aplicación. Al menos es mi caso.

Para corregir esta situación tienes que agregar los DLLs del control en el GAC.

Deberás usar la utilidad gacutil.exe que viene en el SDK del .Net Framework 2. Si no lo tienes, descarga el SDK de aquí­: http://www.asp.net/Downloads/essential/

Coloca el componente (el DLL) en un fólder de la PC en la que usas Visual Web Developer 2008:
explorer.gif

Ahora abre una ventana de MS-DOS, cámbiate a la carpeta en la que tienes instalado el gacutil.exe y corre el comando:

gacutil -i nombredeldll.dll

Algo como esto:
Registrando el DLL en el GAC

Ahora reinicia Visual Web Developer, abre tu aplicación de nueva cuenta y mira como ya funciona el Intellisense y no aparece el error de que tu control no está declarado:
Intellisense funcionando

Espero que te sea de utilidad. 🙂

Actualización
Si necesitaras desinstalar la libreria del GAC, utiliza esta instrucción:
gacutil -u NombreDeLaLibreria
No escribas .dll
Por ejemplo:
gacutil -u FreeTextBox

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.