lunes, 31 de marzo de 2014

Recargar página automáticamente mediante la intrucción Meta refresh

Igual no es una instrucción muy conocida (o al menos yo no la conocía hasta ahora) pero existe una opción en html para indicar al navegador que la página se refresque pasado un cierto número de segundos.


Esta instrucción se representa mediante la etiqueta meta y se debería insertar dentro de la etiqueta <head> aunque en algunos casos pueda funcionar fuera de ella:




...

<header>

<META http-equiv=refresh content=10>

...


En el ejemplo anterior le estamos diciendo que la página se refresque automáticamente cada 10 segundos.


Existe la opción de indicarle al navegador que pasados un cierto número de segundos debe redirigir a una url especificada. En el siguiente ejemplo haremos que el navegador vaya a la url: “pagina.com” pasados 5 segundos.




<meta http-equiv="refresh" content="5; url=http://pagina.com/">


En este otro ejemplo que aparece a continuación le indicamos que redirija a la url “pagina.com” inmediatamente asignando a content el valor 0.




<meta http-equiv="refresh" content="0; url=http://pagina.com/">


Esta es una manera bastante elegante de recargar página automáticamente únicamente con html. Lógicamente existen otras maneras como pueden ser scripts realizados en javascript, php, asp, etc…



Recargar página automáticamente mediante la intrucción Meta refresh

martes, 25 de marzo de 2014

Hacer un Response de cualquier tipo de contenido dentro de un UpdatePanel

Cuando trabajamos con UpdatePanel en ASP existe la posibilidad de que no se pueda realizar una respuesta de cualquier tipo de contenido sin realizar un postback.


Por ejemplo: creación de un fichero xls o xlsx de Excel.




...

HttpContext.Current.Response.ContentType = "application/ms-excel";

...


Si el control que hace de trigger se encuentra dentro del mismo updatepanel es muy posible que sea necesario indicar en el script que dicho control desencadenará el evento.




<asp:UpdatePanel runat="server" ID="upPanel">

<Triggers>

<asp:PostBackTrigger ControlID="btnTrigger" />

</Triggers>

...

</asp:UpdatePanel>



Hacer un Response de cualquier tipo de contenido dentro de un UpdatePanel

jueves, 6 de marzo de 2014

Notificar una excepción manualmente a ELMAH

Si trabajamos con ELMAH y realizamos nuestro propio control de errores será necesario notificarle que queremos que guarde esa excepción controlada. Lo haremos con:




ErrorSignal.FromCurrentContext().Raise(ex);



Notificar una excepción manualmente a ELMAH

domingo, 2 de marzo de 2014

Como crear un Theme en ASP NET

Para crear un Tema o Theme en Visual Studio debemos hacer click derecho sobre el proyecto web y añadir la carpeta de ASP.NET App_Themes . Nos pedirá un nombre, le daremos el nombre MainTheme por ejemplo.


Una vez creado este directorio especial podemos añadirle dentro de sí un nuevo item de extensión .Skin.


Lo último que nos queda es especificar en el web.config la theme que usará el sitio por defecto.




<configuration>
<system.web>
<pages theme="MainTheme">

</pages>

</system.web>

</configuration>


Ya estará funcionando nuestro tema, solo quedaría definir en nuestro skin las propiedades de cada control.



Como crear un Theme en ASP NET

viernes, 28 de febrero de 2014

Crear un botón de ASP NET con Glyphicon

Si con Bootstrap queremos utilizar un botón que tenga un icono de Glyphicon tenemos que olvidarnos del clásico asp:button y utilizar asp:linkbutton de la siguiente manera:




<asp:LinkButton runat="server" Text="<span class='glyphicon glyphicon-remove'></span>" CssClass="btn btn-default btn-xs" />


Lo que hacemos es darle una clase al linkbutton de Boostrap y dentro del text (innerhtml) la etiqueta span y su contenido.


No olvides que debes de tener los ficheros de css necesarios para que esto funcione, o sea bootstrap.css o bootstrap.min.css.



Crear un botón de ASP NET con Glyphicon

jueves, 27 de febrero de 2014

martes, 25 de febrero de 2014

Modelo y Base de Datos con Identity en ASP NET

Con la versión 4.5 de .NET Framework se ha incorporado la autenticación basada en Identity. Esto ya lo hablamos en pasadas entradas, ahora vamos a verlo un poquito más a fondo.


Con Identity se crean las siguientes tablas:


  • AspNetRoles

  • AspNetUserClaims

  • AspNetUserLogins

  • AspNetUserRoles

  • AspNetUsers

En estas tablas se guarda toda la información relacionada con los usuarios. Es en la tabla AspNetUsersr donde  se guardan los siguientes campos:


  • Id

  • UserName

  • PasswordHash

  • SecurityStamp

  • Discriminator

En la siguiente imagen se muestra la estructura de tablas y los campos de la tabla AspNetUsers:


Tablas con Identity en ASP.NET 4.5


Ya entrando en el código, si has generado el proyecto web con una de las plantillas que ofrece Visual Studio 2013 verás que en la carpeta “Models” se ha creado un archivo llamado “IdentityModels.cs”. En este fichero existen varias clases que definen la funcionalidad de Identity en la aplicación. Las clases son:


  • ApplicationUser. Es la entidad Usuario de aplicación. Hereda de “IdentityUser” e inicialmente está vacía aunque podemos meterle las propiedades que deseemos para personalizar nuestro modelo de usuario (http://go.microsoft.com/fwlink/?LinkID=317594). Si nos fijamos en la clase de la que hereda contiene las siguientes propiedades que se mapean a la base de datos: Id, PasswordHash, SecurityStamp, UserName así como las colecciones que relacionan con las demás tablas.

Clase IdentityUser


  • ApplicationDbContext. Es la clase que maneja el contexto Entity Framework con la base de datos. De hecho en su constructor coge el connectionstring del web.config para su conexión con la base de datos en este caso “DefaultConnection”.

Clase ApplicationDbContext


  • UserManager. Es una clase que gestiona operaciones típicas de usuarios con la base de datos. Hereda de “UserStore” y tiene diversos métodos de creación y borrado de usuarios, adicción y eliminación de roles por usuario, búsqueda por nombre o id y muchos más. También tiene gran parte de estos métodos en su modalidad asíncrona. Sin embargo desde aquí no es posible obtener todos los usuarios.

  • IdentityHelper. Esta clase estática situada fuera del espacio de nombres “Models”se encarga de sincronizar la base de datos en los registros de usuarios con el comportamiento de la aplicación en lo que se refiere a la autenticación. Cada vez que un registro de un usuario se efectúa correctamente pasará por IdentityHelper para insertarlo en la base de datos y posteriormente autenticarlo en la aplicación.

Después de analizar todo este rollo vamos a ver como podríamos obtener todos los usuarios con Identity. Si utilizamos directamente el contexto “ApplicationDbContext” accederemos a todos los usuarios mediante su propiedad “Users”:




IList<ApplicationUser> users = context.Users.ToList();



Modelo y Base de Datos con Identity en ASP NET