ASP.NET MVC - areas, manejo de estado

Post on 08-Apr-2017

100 views 0 download

Transcript of ASP.NET MVC - areas, manejo de estado

Areas en ASP.NET MVC, Manejo de Estado

Danae Aguilar Guzmán MCT, MS, MCTS, MCP

danaeaguilar@gmail.com

Areas

Areas

• Si la aplicación se hace grande, es mas complicado manejar la estructura de archivos.

• Las Areas nos permiten organizar diferentes módulos de una aplicación Web basados en su funcionalidad.

• Permiten tener la estructura de MVC para cada módulo

Areas

Creando Areas

1. Click derecho en el proyecto Add > Area

2. Ingresar un nombre y aceptar.

3. Se creara una carpeta con la estructuraMVC:

AreaRegistration

Estructura MVC

Areas

Creando Areas

3.1. Se creará un archivo AreaRegistration:

Define la estrategia de enrutado para el area

public override void RegisterArea(AreaRegistrationContext context) { context.MapRoute( "Catalogo_default", "Catalogo/{controller}/{action}/{id}", new { action = "Index", id = UrlParameter.Optional } ); }

Areas

Creando Areas

3.2. Se registran las areas en el archivoGlobal.asax, en el método Application_Start:

protected void Application_Start() { AreaRegistration.RegisterAllAreas();

Areas

Creando Areas

4. Crear controllers y vistas

5. Agregar el espacio de nombres del controller principal en el archivo RouteConfig:

routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }, namespaces: new[] { "EjemploAreas.Controllers" } );

Areas

Creando Areas

6. Agregando enlaces a las areas:

<li>@Html.ActionLink("Ver Catalogo",

"Index",

"Home",

new { area="Catalogo"},

null)

</li>

Areas

Creando Areas

6.1. Pasando datos en el enlace:

<li>@Html.ActionLink("Ver Catalogo",

"Index",

"Home",

new { area="Catalogo",

Usurio = "Juanito" },

null)

</li>

Areas

Usando layout en Areas

Necesitamos copiar al web config externo, los datos del web.config que esta en la carpetashared: <configSections>

<sectionGroup name="system.web……. <section name="host" type="System……. <section name="pages" type="System.Web……. </sectionGroup> <section name="entityFramework" type="System……. </configSections> <system.web.webPages.razor> <host factoryType="System……. <pages pageBaseType="System.Web.Mvc.WebViewPage"> <namespaces> <add namespace="System.Web.Mvc" /> <add namespace="System.Web.Mvc.Ajax" /> <add namespace="System.Web.Mvc.Html" /> <add namespace="System.Web.Optimization"/> <add namespace="System.Web.Routing" /> </namespaces> </pages> </system.web.webPages.razor>

Manejo de estado

HTTP es un protocolo sin estado Cada request implica volver a crear todas las

instancias de nuestra página.

Podemos mantener estado:1.Del lado del server:

Application state, Session state

2. Del lado del Cliente: Cookie state, Query Strings

3. Entre peticiones: Cross-page posting, Items collection

Manejo de Sesiones y aplicación

Los datos se guardan en el servidor

Mas seguro

Evita el envió de datos en cada petición

Application state permite guardar datos globales para toda la aplicación

× Consume memoria del servidor

× Puede reducir el performance y escalabilidad de la aplicación

Manejo de Sesiones y aplicación

Application State

Estado compartido por todos los usuarios de la aplicación

Usar cuando obtener un valor que se requiere siempre, consume demasiado en obtenerlo para cada petición.

Se perderán los datos si en server se reinicia o detiene.

Manejo de Sesiones y aplicación

Application State

Se almacena en una instancia de HttpApplicationState

Accedemos por la propiedad Application

HttpContext.Current.Application["Nombre"] = "Pepe";

Manejo de Sesiones y aplicación

Application State

Para actualizar Application debemos ponerun bloqueo

Application.Lock(); Application["clicks"] = ((int)Application["clicks"]) + 1; Application.UnLock();

Manejo de Sesiones y aplicación

Session State

Son datos específicos para cada usuario

Los datos se pierden si la sesión del usuario termina.

Se almacena en el servidor, pero puede configurarse para almacenarse en cookies, en otro state server o en una Base de Datos

Manejo de Sesiones y aplicación

Session State

Accedemos mediante la propiedad Session

if (Session["ultimaVisita"] != null) { Label1.Text = ((DateTime)Session["ultimaVisita"]).ToString(); } else { Label1.Text = "Ultima visita es desconocida"; } Session["ultimaVisita"] = DateTime.Now;

Cookies

Se almacenan en el cliente

Se pueden mantener en archivos disponibles en el tiempo en distintas peticiones desde la misma máquina.

No se mantiene si el usuario se conecta desde otra máquina o dispositivo

Los usuarios pueden eliminar los cookies en cualquier momento

Cookies

Crear un Cookie:

Acceder a un Cookie:

Cuando expira un Cookie:

Response.Cookies.Add(new HttpCookie("userId", userId));

var id = Request.Cookies["userId"].Value;

Response.Cookies["lastVisit"].Expires = DateTime.Now.AddDays(1);

QueryString

Se pasan en el url:

http://www.miSitio.com/test.aspx?nombre=juanito&edad=21

Acceder al valor:

Label1.Text = Request["nombre"];