1. Areas en ASP.NET MVC, Manejo de
Estado
Danae Aguilar Guzmán
MCT, MS, MCTS, MCP
danaeaguilar@gmail.com
2. 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
3. Areas
Creando Areas
1. Click derecho en el proyecto Add > Area
2. Ingresar un nombre y aceptar.
3. Se creara una carpeta con la estructura
MVC:
AreaRegistration
Estructura MVC
4. 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 }
);
}
5. Areas
Creando Areas
3.2. Se registran las areas en el archivo
Global.asax, en el método Application_Start:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
6. 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" }
);
7. Areas
Creando Areas
6. Agregando enlaces a las areas:
<li>@Html.ActionLink("Ver Catalogo",
"Index",
"Home",
new { area="Catalogo"},
null)
</li>
8. Areas
Creando Areas
6.1. Pasando datos en el enlace:
<li>@Html.ActionLink("Ver Catalogo",
"Index",
"Home",
new { area="Catalogo",
Usurio = "Juanito" },
null)
</li>
9. Areas
Usando layout en Areas
Necesitamos copiar al web config externo, los
datos del web.config que esta en la carpeta
shared: <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>
10. 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
11. 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
12. 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.
13. 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";
14. Manejo de Sesiones y aplicación
Application State
Para actualizar Application debemos poner
un bloqueo
Application.Lock();
Application["clicks"] = ((int)Application["clicks"]) + 1;
Application.UnLock();
15. 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
16. 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;
17. 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
18. 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);
19. QueryString
Se pasan en el url:
http://www.miSitio.com/test.aspx?nombre=ju
anito&edad=21
Acceder al valor:
Label1.Text = Request["nombre"];