Está en la página 1de 137

TUT: Aprender ASP .

NET MVC Paso a


Paso en 7 dias(Dia 1)
IN ¡, ASP.NET MVC - ON 7:28 - 34 COMENTARIOS

Este artículo es parte de Aprender paso a paso ASP.NET MVC en 7 días y puedes revisarlo en los
link siguientes:

 Dia 1: Controladores, vistas fuertemente tipadas y clases helper


 Dia 2: Testeo unitario, ruteo de URL saliente 
 Dia 3: Vistas parciales, anotaciones de datos, Razor, Autenticacion y Autorizacion  
 Dia 4: JSON, JQuery, administrador de sesiones y controladores asíncronos
 Dia 5: Empaquetamiento, Minificacion , ViewModel , Manejo de excepciones y Areas
 Dias 6: MOdos de Visualización, Proveedor MVC OAuth, Enlace Modelo MVC

Contenido

 ¿Por qué el code-behind en tan bueno en ASP.NET?


 Problema número 1: Testeo Unitario
 Problema número 2: La realidad de la separación del código y la UI
 Nuestro Héroe MVC(Modelo, Vista y Controlador)
 Pre-Requisitos
 Lab 01: Creando una simple Aplicacion ASP.NEt MVC “Hola Mundo”
 Lab 02: Pasando datos entre el controlador y la vista
 Lab 03: Creando un simple modelo usando MVC
 Lab 04: Creando un simple formulario de entrada de datos MVC
 Lab 05: Usando Razor para crear vistas rápidamente
Como el nombre del artículo dice, aprender MVC, la agenda es simple, vamos a
aprender ASP.NET MVC en 7 dias.

La manera como aprenderémos MVC en esta serie de artículos es haciendo


laboratorios, mirando los pasos detallados de cómo se hacen esos laboratorios.

Queriendo demostrar que el concepto MVC es igual entre ASP.NET MVC y SPRING MVC es
que realizare Aprender MVC con las dos tecnologias( para ls amantes de microsoft y para los
amantes del software libre).
Pueden revisar Aprender SPRING MVC Paso a Paso en 7 dias(Dia 1)

¿Porque el code-behind en tan bueno en ASP.NET?

Estoy seguro que todos los desarrolladores les gusta el concepto de code-behind. La
aceptación de algo nuevo como MVC, no es nada fácil para ellos.

Cuando hablamos de construir aplicaciones ASP.NET en una arquitectura de capas,


ellas se dividen en cuatro partes: UI(paginas ASPX), code-behind(archivos ASPX.cs),
capa intermedia(clases .NET) y finalmente la capa de Datos(Data layer).

Si se mira los aspecto de la distribución del código, el mayor código el cual tiene la
lógica es la capa intermedia o el code-behind(archivos ASPX.cs). La UI(Interfaz de
Usuario) o archivos ASPX son archivos HTML, los cuales son mas acerca del
diseñador de la interfaz de usuario, y la lógica de acceso a datos son mas o menos
componentes estándar como los Enterprise Data Blocks.

Vamos a analizar los problemas.

Problema número 1: Testeo Unitario

De los aspectos del testeo unitario podemos excluir la Lógica de data y el UI HTML.
Las clases de lógica de datos son ya componentes testeados como Enterprise Data
Block, entity data context, o LINQ data context. Nosotros ya no tenemos que incluir
esfuerzos en testear separadamente el DAL. En caso que tu tengas un capa de
acceso a datos personalizado este sería fácil de testearlo como son simples clases
.NET.

No hay ninguna lógica en testear ASPX HTML, como se trata más de apariencia.

La capa intermedia es nuevamente un simple clases .NET como lógica de data que se
puede fácilmente testear usando VSTS.
Ahora viene el punto más importante: el   The code-behind tiene mucho de acción y
testear esto es una de las cosas más importantes. la única manera de  invocar estos
códigos es haciéndololos de forma manual, desde una perspectiva de tiempo esto no
sería una gran opción.

El code-behind de ASP.NET esta completamente atado con el objeto HttpContext de


ASP.NET lo cual hace dificultoso el testeo unitario.

Problema número 2: La realidad de la separación del código y la UI

como dije previamente, los ASPX y los ASPX.cs, no pueden ser desacoplados, lo que
reduce la reutilización. Si, Microsoft dijo primero que el code-behind es diferente de la
UI, pero entonces ellos son solo archivos físicamente separados y no pueden existir
sin uno  del otro.

Por ejemplo digamos que el mismo codigo del  boton click cuando se llama via HTTP
POST podría visualizar usando displayinvoice.aspx y cuando llamo via HTTP GEt
podría mostrar en un tree view.  En otras palabras deberíamos como reusar el code-
behind. Justo pienso como puedo hacer esto usando el actual code-behind.

Nuestro Héroe MVC(Modelo, Vista y Controlador)

Esto es cuando MVC llega al rescate. El code-behind es movido a un simple clase .net
llamado Controller.  Cualquier usuario que solicita primero llega al la clase Controller,
la clase Controller entonces invoca el modelo, y agrega el modelo a la vista para
mostrarlo al usuario final.

Como este Controlador es un simple clase .NET, podemos reusarlo y hacer testeos
unitarios facilmente. Vamos a ver como podemos crear Aplicación MVC usando la
Plantilla MVC proveídaa por Visual Studio.

Pre-Requisitos
- Visual Studio 2012( Cualquier version). Esto incluye ASP.NEt MVC 4

Lab 01: Creando una simple Aplicacion ASP.NEt MVC “Hola Mundo”

En este laboratorio crearemos un simple programa hola mundo, utilizando la plantilla


MVC. Crearemos un simple controlador, conecta el controlador a una simple página
index.aspx y ver la página en un Browser.  

Paso 01: Crear el Proyecto


Crear un nuevo proyecto seleccionando Aplicacion Web de ASP.NET MVC 4 y como
nombre del proyecto MyFistHelloWorld,  en la siguiente ventana selecionamos vacio.

Una vez hecho click en Aceptar, ya tiene  hecho la estructura con las carpetas
apropiadas, donde puedes agregar controladores, vistas y modelos.
Paso 02: Agregar un controlador

ahora vamos a agregar un nuevo controlador como se muestra en la siguiente figura.

Paso 03: Agregar una vista

Ahora que tenemos el controlado necesitamos agregar la vista. Hacemos click


derecho en la función Index el cual esta en el controlador y seleccionamos Add View.
En el cuadro de dialogo indica el nombre de la vista, el cual debe ser el mismo que en
el controlador(Index) u desactiva usar una pagina de diseño o maestra, porque no
queremos que nuestra vista herede de un Master Page.
Una vez hecho en aceptar, podremos ver una simple pagina ASPX con el siguiente
codigo HTML.

Paso 04: Ejecutar la Aplicación

Si haces Ctrl + F5 verás un error. Este error es obvio, porque no invocamos


apropiadamente el controlador/accion.

Si digitas en el browser la URL debes ser capaz de ver correctamente la vista.

Lab 02: Pasando datos entre el controlador y la vista


El controlador recibe la primera carga del modelo, la mayoria de veces nos gustaría
pasar del modelo a la vista para la visualización.

Para MVC nos gustaría ver el alcance limitado al controlador y la vista, en otras
palabra nos gustaría mantener datos cuando el golpe llega al controlador y alcanza la
vista y después que el alcance de los datos debe expirar.

Ahí es donde la nueva técnica de gestión de sesiones se ha introducido en el marco


de ASP.NET 

MVC, es decir el ViewData.

Paso 01: Crear proyecto y definir la vista de datos.

El primer paso es crear un proyecto y un controlador. En el controlador, definir la


variable viewdata, como mostramos en el código de abajo.

Paso 02: Mostrando el view data en la vista.


lo siguiente  es mostrar data en la vista pero usando. tag porcentaje. Uno de los
puntos mas importantes a notas es  que  la vista no tiene cod-behind. Para mostrar la
vista necesitamos usar  el tag <% en la pagina ASPX.

Paso 03: Ejecutamos la aplicación

Presionamos Ctrl+F5 y modificamos la URL en el Browse.

Lab 03: Creando un simple modelo usando MVC

En este laboratorio crearemos un simple modelo personalizado, esto con algunos


datos y mostrarlo en la vista.
Paso 01: Creamos un simple archivo de clase

el primer paso es crear un simple modelo personalizado el cual esta en blanco con
tres propiedades: code, name, y amount. Crear un simple Proyecto MVC y hacer click
en la carpeta model y clic en Add New Item  y seleccionar clase y asignarle el nombre
Curstomer.

Paso 02: Definimos un controlador con acción

el primer paso es crear un controlador y agregar una simple acción que muestre el
Customer.

Importar el namespaces del modelo en la clase controlador, creamos un objeto de la


clase Customer con algunos datos y lo pasamos a la vista llamado “DisplayCustomer”.
Paso 03: Creamos una vista fuertemente tipada usando la clase.

Necesitamos ahora unir los puntos de MVC, mediante la creación de vistas. Hace clic
derecho en el método DisplayCustomer dentro del controlador(Con realizado en el
primer laboratorio).

Nota: Previamente es necesario que se compile el proyecto


la ventaja de crear una vista fuertemente tipada es que se pueden obtener las
propiedades de las clases en la vista pero digitando model y “.” como se muestra:
Abajo esta el codigo de la vista(sintaxis Razor) el cual muestra los valores de las
propiedades del cliente. También podemos asignar una condición IF que muestre los
clientes como un cliente privilegiado si la cantidad está por arriba de 100 y un cliente
normal si esta por debajo de 100.

Paso 04: Ejecuta la aplicación

Ahora para ejecutar la aplicación presiona Ctrl+F5.

Lab 04: Creando un simple formulario de entrada de datos MVC


Cada proyecto pequeño o grande necesita un formulario de entrada de datos. En este
laboratorio crearemos una simple entrada de datos para nuestro cliente como se
muestra:

Tan pronto como el usuario final ingrese los detalles y envíe los datos estos serán
direccionados a la siguiente ventana como muestra abajo: 

Paso 01: Creando la Página de entrada de datos

el primer paso para crear una entrada de datos es usar las etiquetas form de HTML
como se muestra en el código de abajo. Lo mas importante a notar es que la accion
del boton  es apuntada al método del controlador llamado “DisplayCustomer”.

Para ayudarnos de Visual Studio y como ya sabemos toda pagina esta relacionada a
una accion del controlador en el controlador Customer vamos a crear el metodo
FillCustomer.
Después siguiendo los pasos anteriores de como crear una vista(Click derecho y Add
View) creamos la vista FillCustomer.

Paso 02: Creando el controlador


Arriba definimos la acción del formulario hacia el controlador a la función
DisplayCustomer

Necesitamos obtener los datos de los controles HTML(form), llena el objeto y enviar el
objeto a la vista.

Debajo el código de DisplayCustomer, llena el objeto customer  con los datos de la


colección Request.Form y envía los objetos a la vista DisplayCustomer.

Paso 03: Creando la vista para mostrar el objeto customer

El siguiente paso es crear la vista DisplayCustomer, seleccionado la opción vista


fuertemente tipada( realizada en los pasos anteriores).
Paso 04: Finalmente ejecutar el proyecto

Presionando las teclas CTRL + F5 ejecutamos el proyecto.

Y al hacer clic ek en botón enviar muestra la vista DisplayCustomer.


Lab 05: Usando Razor para crear vistas rápidamente

En nuestros laboratorios anteriores creamos un simple formulario de entrada de datos


para customer completamos el laboratorio de forma satisfactoria pero hubieron dos
problemas:

 Los Código HTML fueron escritos manualmente. En pocas palabras esto fue
poco productivo, esto es como escribir codigo HTML usando el notepad.
 Agregado a esto, mucho del código manual fue también escrito en el
controlador para llenar los objetos y enviarlo a la vista.

En este laboratorio veremos como usar clases razor para minimizar el código manual
e incrementar la productividad.

Paso 01: Creando la clase Customer

Para crear la clase Customer ir al laboratorio 03.

Paso 02: Creando la entrada de formulario  HTML usando clases Razor


Las clases Razor tienen funciones el cual te permite crear controles HTML con
facilidad enviar a la vista y ver el intellisense de las clases Razor.

Usando Razor puedes crear cualquier control HTML como TextBox , Label, ListBox.

En orden para crear una etiqueta forma para HTML necesitamos usar
“Html.BeginForm”

El código de arriba genera el siguiente codigo HTML:

El razor HTML “BeginForm” toma tres parámetros nombre de la acción, el nombre del
controlador y el método HTTP(GET, POST).

Vamos a crear el formulario de entradas de datos:


Paso 03: Creando una vista Fuertemente tipada

Para crear el formulario con Razor es necesario que la vista se haya creado con la
opcion vista fuertemente tipada como se realizo en el laboratorio 03. Pero si no se
hizo esto en la parte superio de la vista agregamos lo siguiente y hacer la vista
fuertemente tipada.

Con esto ya podemos crear nuestro formulario en la vista FillCustomer.


Paso 04: Creando el controlador

La parte final es el codigo del controlador(Customer), el codigo del controlador ahora


es mas simple, el objeto customer va ser autollenado por nuestras clase razor.

y al final ejecutar y mostrará los datos

Muy bien, ahora vamos por unas por unas cheliñas para celebrar el cumplimiento de
nuestro primer dia con ASP.NET MVC.
¿Y que hay para el segundo Día?

Para el segundo día hablaremos acerca de Routing URL, fácil manera del testeo
unitario MVC, atributos del controlador y mucho mas.Los siguientes laboratorio van a
ser más avanzados a comparado con el primer dia. asi que realiza todos los
laboratorios para que estes listo para el segundo dia.

Suerte.

TUT: Aprender ASP .NET MVC Paso a


Paso en 7 dias(Dia 2)
IN ¡, ASP.NET MVC - ON 19:03 - 17 COMENTARIOS

Contenido 

 ¿Cuál es la Agenda? 

 Lab 06: Testeo Unitario en Proyectos MVC 

 Lab 07: Entendiendo el Ruteo en MVC 

 Lab 08: Validando y Asignando Valores por defecto a las URLs en MVC 

 Lab 09: Entendiendo URLs Salientes en MVC 

 ¿Qué hay para el Tercer Día? 

¿Cuál es la Agenda?
Este artículo es la continuación de Aprender paso a paso en 7 dias y puedes revisarlo en los link

siguientes: 

 Dia 1: Controladores, vistas fuertemente tipadas y clases helper

 Dia 2: Testeo unitario, ruteo de URL saliente 

 Dia 3: Vistas parciales, anotaciones de datos, Razor, Autenticacion y Autorizacion 

 Dia 4: JSON, JQuery, administrador de sesiones y controladores asíncronos

 Dia 5: Empaquetamiento, Minificacion , ViewModel , Manejo de excepciones y Areas

 Dias 6: Modos de Visualización, Proveedor MVC OAuth, Enlace Modelo MVC

En este dia 2 veremos los siguientes cuatro laboratorios: 

 Escribiendo Testeos Unitarios en Proyectos MVC. 

 Configurar Rutas en MVC 

 Validación de Rutas en MVC 

 Configurando Rutas de salida en MVC 

Lab 06: Testeo Unitario en Proyectos MVC

Cuando empezamos toda la serie MVC(Dia 1) empezamos con dos problemas relacionados al code-

behind. 

¿Cómo podemos hacer testeos unitarios en ASP.NET code behind?

¿Como podemos reusar el code behind de ASP.NET con diferentes interfaces de usuarios?

En esta sección vamos a concentrarnos en el primer punto, es decir, Testeo Unitario.

Solo una rápida recapitulación si necesitamos hacer testeo unitario al siguiente

método btngenerateinvoices_click de Code behind de ASP.NET, tenemos los siguientes

problemas: 

 ¿Cómo hacemos para crear los objetos sender y eventargs? 

 El código de abajo se ejecuta bajo el objeto HttpContext, ¿Cómo puedo imitarlo? 


 ¿Qué pasa con los controles de interfaz de usuario de ASP.NET, Cómo accedo a estos? 

 ¿Qué pasa con otros objetos de ASP.NET como objeto sesion,y aplicacion, cómo accedo a

estos? 

Muchos desarrolladores podrían hablar acerca de mock tests, rhino mocks,etc. pero todavía esto

es desapercibido y la compliacion aumenta con las variables de sesion, objetos de data view,

controles ASP.NET UI, creando aun mas confusión.

Asi que lo que haremos en esta sección es crear una simple aplicación MVC y haremos teste

unitario en aplicaciones ASp.NEt usando el testeo unitario de Framework VSTS.

Paso 1: Crear un simple proyecto las mostrar Customer.


El primer paso es crear un simple proyecto MVC. Usaremos el mismo proyecto el cual nosotros

temos creado en MVC(Modelo Vista Controlador) del dia 1(MyFirstHelloWorld). En caso no tengas

el proyecto mencionado, por favor crea uno usando el enlace de arriba.

La clase controlador al final del día 1 es una simple clase .NET. Por ejemplo, si miras el código

del proyecto cercanamente, puedes ver fácilmente la clase controlador de Customer con se

muestra a continuación: 

En simples palabras este es una simple clase .NET podemos fácilmente instanciar la clase y crear

automáticamente testeos unitarios para el mismo. Esto es exactamente lo que vamos hacer en

nuestros siguientes pasos:

Paso 2: Agregando un simple proyecto de testeo unitario.


Vamos a usar nuestro testeo unitario del framework de VSTS para testear la clase controlador.

Agrega un nuevo proyecto a su solución usando la plantilla Proyecto Prueba Unitaria.

Paso 3: Agregar referencias apropiadas al proyecto

Necesitamos agregar un referencia a la aplicación MVC en nuestro proyecto de prueba

unitaria(MVCUnitTest), para que podamos controlar la clase Controlador.


Una vez agregado la referencia , deberías ver en la aplicación MVC e la referencia de proyecto

como se muestra en la siguiente imagen:

Paso 4: Escribir la prueba unitario

Una vez que tengas agregado la referencia, abre la clase de prueba unitaria,es

decir UnitTest1.cs. En esta clase crear un simple método de teste llamado DisplayCustomer el

cual es atribuido por el atributo TestMethod como se muestra en el siguiente código.

Si tu ves el siguiente pedazo de código estamos creando un objeto de la clase controlador,

invocando la acción del controlador, es decir, DisplayCustomer y entonce verificamos si el


nombre de la vista es DisplayCustomer. Si ellos son igual esto significa el paso de la prueba o en

caso contrario esto es fallido.

Paso 5: Finalmente ejecutamos la prueba unitaria

Una vez escrito la prueba es tiempo de ejecutar caso de prueba para lo cual vamos hacer click en

el menú Prueba->Ventanas-> Explorador de Pruebas.

En el Explorador de pruebas hacer click derecho y seleccionar Ejecutar Pruebas Seleccionadas.

Si las cosas van bien tu deberias ver una indicación de color verde que indica que la prueba ha

pasado o caso contrario deberías ver un color rojo con el detalle indicando porque la prueba ha

fallado.
Lab 7: Entendiendo el ruteo MVC 

Introducción

Al final del día, MVC no es nada más que una dirección de URL asignada a los controladores y los

controladores asignados a acciones.


Por ejemplo cuando un usuario envia un requerimientio de URL como

http://www.maninformatic.com/UbicaProducto del navegador, estas acciones son asignadas con

los controladores de MVC, y los controladores de MVC finalmente invocan esas funciones.

Lo siguiente es una simple tabla el cual muestra cómo todo esto se ve así.

Añadiendo aún más a la complicación que podemos tener varias direcciones URL asignadas a un

controlador o se puede tener más de un controlador asigna a una sola URL. Por ejemplo, puedes

tener www.maninformatic.com/contactenos y www.maninformatic.com/conocenos asignada a

un solo controlador llamado ConocenosController

.
Sería muy bueno si tenemos algún tipo de mecanismo por el cual podemos configurar estas

asignaciones. Eso es lo que exactamente MVC routing significa. El enrutamiento MVC ayuda a

configurar y asignar la dirección URL con los controladores fácilmente.

Paso 1: Tomar el proyecto MVC creado en el dia 1

Vamos a tomas el mismo proyecto de Customer( MyFisrtHelloWorld) que hemos desarrollado en la

seccion anterior.

Paso 2: Cambiar Global.asax.cs

Todas las asignaciones de rutas son almacenados en el archivo de código fuente RouteConfig.cs.

Así que como primer paso es que tenemos que ir a cambiar este archivo.

Todas las asignaciones de rutas son almacenadas dentro de la colección llamada routes. Esta

colección pertenece al namespaces System.Web.Routing. Para agregar una ruta tu necesitas

llamar el método MapRoute y pasar tres parámetros name, url y defaults.


Debajo está una captura de retazo de código de la función MapRoute.

 Name es el nombre principal por la cual la ruta será identificada dentro la colección. 

 URL define que tipo de formato de URL queremos conectar con el controlador.En el

pedazo de código siguiente decimos que el formato URL es View/ViewCustomer. 

 Defaults define la clase controlador y las funciones de accion los cuales serán invocados

cuando la URl es llamada. Por ejemplo, en el código siguiente, decimos que cuando

View/ViewCustomer es llamado, este invocará la clase controlador Customer y la funcion

acción invocada sera DisplayCustomer. 

En caso su controlador tome parámetros, puede usar el { (llaves).Por ejemplo en el siguiente

pedazo de codigo, nosotros hemos usado { para especificar que podemos tener un parámetro id.

Si quieres definir los parámetros como opcionales puedes usar el enum UrlParameter.Optional.

Lo primero es comentar el código de asignación predeterminada. Vamos a explicar el código de

asignación predeterminada más tarde.


Ingresamos el siguiente codigo, el cual significa cuando llamamos a

http:/localhost/view/ViewCustomer esto invocará al controlador Customer y llamara la funcion

DisplayCustomer.

Paso 3: Ejecuta la aplicación

Si ejecutas la aplicación deberias ver lo siguiente:

Nota: No muestra ningún nombre, porque esto tiene que ser enviado del formulario, y puedes

probar cambiando el la propiedad action del formulario(view/viewCustomer).

Si recuerdas nosotros comentamos la entrada de ruta por defecto(default), vamos a entender qué

significa exactamente ese código.

“{controller}/{action}/{id}” define este que la URL será automáticamente llamado con la

convención Controlador(nombre/función) accion (nombre/valor). si tienes una clase controlador

con Customer y función acción como Search entonces el URL será estructurada automáticamente

como htt://www.maninformatic.com/Customer/Search.

Lab 8: Validando y asignando valores por defecto a URLs de MVC


MVC tiene que ver con la acción que se produce a través de la URL y los datos para esas acciones

también es proporcionado por la URL.

Seria bueno si pudiéramos validar los datos que se transmiten a través de estas URL de MVC.

Por ejemplo vamos a considerar la URL MVC http://localhost/Customer/ViewCustomer si quieres

ver el detalle para el código del customer 1001, necesitas ingresar

http://localhost/Customer/ViewCustomer/1001.

El código de Customer es un número natural. En otras palabras, cualquier persona que ingrese

una URL MVC como http://localhost/Customer/ViewCustomer/Shiv es inválido. El framework MVC

provee un mecanismo de validación por el cual podemos comprobar en la propia URL si el dato es

apropiado. En este laboratorio veremos cómo validar datos el cual es ingresado en la URL MVC.

Paso 1: Creando un simple modelo Customer.

En este primer paso vamos a trabajar con nuestra simple clase modelo Customer ya creada en los

pasos anteriores.

Paso 2: Creando la clase controlador

En el siguiente paso vamos a utilizar la clase controlador Customer ya creada en pasos anteriores

agregando una colección de Customers en el constructor.


El controlador tiene una simple función DisplayCustomer el cual muestra los clientes usando el

valor ID. Esta función toma el valor Id y encuentra en la colección customer.

Si miras en la función DisplayCustomer esta toma un valor id el cual es numérico. Deberíamos

tomar como una validación el campo ID el cual indica lo siguiente:

 Id debería siempre ser numérico

 Este debería ser entre 0 y 99

Paso 3: Aplicando Validación usando regex en la ruta MVC


La validación descrito en el paso 2 puede ser logrado aplicando expresiones regulares en el

mapeo de ruta(MapRoute). Si vamos al archivo RouteConfig.cs y vemos la función maproute., la

entrada a esta función es el constraint como se muestra es la figura de abajo.

En este orden para acomodar la validación necesitamos especificar el regex constraint es decir

‘\d{1,2}’ en la función maproute como se muestra abajo. ‘\d{1,2}’ en regex significa que la

entrada debería ser numérico y ser un máximo de 1 o 2 es decir entre 0 y 99.

Puedes especificar los valores por defecto diciendo id=0 como se muestra en el código de abajo.

En el caso de que ID no este especificado este tomara el valor 0 por defecto.

Paso 4: Probando si esto trabaja


Ahora que estamos haciendo la validación usando la función maproute, es tiempo de probar si

esta validación trabaja. La primera prueba tenemos que especificar 1 y veremos que el

controlador es correcto y la data es mostrada.

Si especificamos un valor mayor a 99, deberíamos obtener un error como se muestra abajo. Por

favor note que el error es confuso pero es el efecto de la validación regex el cual especifica la

función maproute.
El punto más importante a notar es que esta validación se ejecuta antes que la solicitud a la

función del controlador.

Lab 9: Entendiendo URLs salientes en MVC

Introducción

Cuando hablamos de aplicaciones web, los usuarios finales estarían como navegando de una

página a otra página. Como desarrollo simple primeramente estarías pensando en dar justo los

nombres de la aginas como se muestra en la figura de abajo.


Por ejemplo si quieres ir y mostrar de home.aspx a about.aspx darás el enlace al nombre de la

página y las cosas deberían ser bien.

Pero haciendo esto estas violando los principios de MVC. Los principios MVC dicen que la llamada

debería primeramente llegar al controlador, pero especificando <a href=”home.aspx” a> la

primera llamada es a la vista. Este inconveniente es completamente lógica del controlador y tu

arquitectura MVC falla.

Lo ideal es que las acciones deberían direccionar a las páginas. Los enlaces deberían tener

acciones en la etiqueta anchor(<a>) y no nombres de páginas es decir nombres de vistas.

Paso 1: Creando el controlador para las vistas

Definimos las acciones que invocaran estas vistas. En el siguiente codigo tenemos definido tres

acciones: GotoHome( esta invoca a la vista Home), AboutUs(Este invoca a la vista about), y

SeeProduct(Este invoca a la vista product).


Paso 2: Creando vistas

Ahora vamos a crear las vistas para los tres métodos definidos en el controlador Site(About,

Home, Product).

Ahora vamos a crear una simple navegación entre estas simples páginas como se muestra abajo.

De la vista Home nosotros estaríamos navegando a las vistas About y Product. De las vistas About

y Product estaríamos navegando atrasa la vista Home.


Paso 3: proveyendo acciones en los link.

Para invocar las acciones relacionadas a las vistas necesitamos especificar las acciones en la

etiqueta anchor como se muestra en el siguiente código.

El código de arriba fue para la vista Product, pues hacer lo mismo para las vistas About y Home.

Para la Vista Home:


Para la vista About:

Paso 4: Disfrutando su navegación

Antes de probar la navegación, es necesario modificar el mapeo de ruta modificado el los

laboratorios anteriores. Asi vamos al archivo RouteConfig.cs. y lo dejamos con en un inicio:


Ahora si tienes especificado las acciones dentro el enlace, navegas entre las paginas Home, about

y product.

Mientras navegas puedes ver como el URL son dirigidos a las acciones mas que a los nombres de

las paginas como home.aspx, aboutus.aspx el cual viola completamente los principios MVC.

¿Qué hay para el tercer día?

Es la tercera sesión, hablaremos acerca de vistas parciales, validación usando notaciones de data,

Razor(MVC4), Autenticación avanzada en MVC, Autenticación de formularios en MVC y mucho

más. Los siguientes laboratorios podrían ser mucho más avanzados comparados al segundo día.

TUT: Aprender ASP .NET MVC Paso a


Paso en 7 dias(Día 3)
IN ¡, ASP.NET MVC - ON 21:39 - 13 COMENTARIOS
Contenido

 ¿Cuál es la Agenda?

 Lab 10: Vistas Paciales

 Lab 11: Validación usando Anotación de Data

 Lab 12: MVC4: Razor

 Lab 13: Seguridad en MVC(Windows Authentication)

 Lab 14: Seguridad en MVC(Forms Authentication)

 ¿Qué hay para el Cuarto Día?

¿Cuál es la Agenda?

Este artículo es la continuación de Aprender paso a paso en 7 días y puedes revisarlo en los link

siguientes:

 Dia 1: Controladores, vistas fuertemente tipadas y clases helper

 Dia 2: Testeo unitario, ruteo de URL saliente 

 Dia 3: Vistas parciales, anotaciones de datos, Razor, Autenticacion y Autorizacion 

 Dia 4: JSON, JQuery, administrador de sesiones y controladores asíncronos

 Dia 5: Empaquetamiento, Minificacion , ViewModel , Manejo de excepciones y Areas

 Dias 6: MOdos de Visualización, Proveedor MVC OAuth, Enlace Modelo MVC

En este día 3 veremos los siguientes cinco laboratorios:

 Vistas paciales

 Validación usando anotaciones de data

 Razor(MVC 4)

 MVC Windows Authentication

 MVC Forms Authentication

Lab 10: Vistas Parciales


Cuando hablamos acerca de aplicaciones web, reusabilidad es la clave. Como desarrolladores MVC

estaríamos gustosos para crear vistas reusables. Nosotros gustaríamos crear vistas reusables como

Vistas de cabecera y pie de página y usarlos dentro de una vista MVC grande.

La vistas reusables podrían se logrados creando “Vistas Parciales”.

Paso 1: crear una simple vista

Para desarrollar este laboratorio vamos a crear un nuevo proyecto vacío MVC(MvcTercerDia).

El primer paso será crear una simple vista con un controlador. Puedes ver en la siguiente captura,

Ahí hay una simple vista llamada “Index.aspx” el cual será invocada via HomeControlles.aspx.
Paso 2: Crear una simple vista parcial

Ahora que hemos creado la vista principal, es tiempo de crear una vista parcial el cual puede ser

consumido desde la vista “Index”. En orden para crear la vista parcial, click derecho sobre la

carpeta view y agregar vista, marcar el check box “Crear como vista parcial” como se muestra en

la siguiente figura.

Paso 3: Llamar a la vista parcial en la principal.

Ingresar algo de texto o lógica en la vista parcial

Paso 4: Llamar a la vista parcial en la principal.


Finalmente llamar la vista parcial en la vista principal usando la función “Html.RederPartial” y

pasar el nombre de la vista en la función como se muestra en el siguiente código.

Tambien asegurarse que la vista parcial este en el mismo folder donde está su vista principal. Es

caso de que no este , entonces necesitaras pasar el path en la función RenderPartial. Puedes ver

la siguiente figura se ha movido la vista parcial en el folder Views/Home.

Paso 5: Ejecutar el programa ara ver la acción

Finalmente presionar Ctrl+F5, y veras como se carga la vista parcial.

Lab 11: Validación usando Anotación de Data

La validación de data es una de las principales cosas en cualquier aplicación web. Como

desarrollador deberías ejecutar la validación en el cliente(browser) y en el servidor. Así que

probablemente le gustaría escribir la validación de una vez y luego esperar el framework de

validación para generar la lógica de validación en ambos extremos.

Buenas noticias, esto es posible pero usando anotaciones de data. En MVC validas los valores del
modelo. Cada vez que la data llega desde el modelo tu preguntaras al modelo diciendo, es este la

propiedad proveída?, son los valores dentro del rango?.

Las Anotaciones de data son metadata el cual puedes aplicar en el modelo en el framework MVC

validara usando la metadata proveída.

En este laboratorio vamos a enfocar la validación usando anotaciones de datos. Lo primero que

vamos a hacer es, en el mismo proyecto(MVCTercerDia), crear una clase modelo Customer y una

vista fuertemente tipada de entrada de datos llamada Home.cshtml.

Asumiendo que tienes creado el modelo y la vista fuertemente tipada, vamos a empezar a aplicar

Anotaciones de Data.

Paso 1: Decorar el modelo con Anotación de Data.

Importante importar el espacio de nombres DataAnnotations como se muestra en el código de

abajo.

Vamos a decir que tenemos un modelo Customer y queremos asegurar que el campo código es

obligatorio.

Entonces aplicar el atributo “Required” como se muestra en el siguiente código. si la validación

falla y le gustaría mostrar un mensaje de error, puedes pasar el “ErrorMessage” también.


Paso 2: Cambiar el codigo Home.cshtml

Ahora hay algunos cambios de código que deberiamos hacer en el código Home.cshtml. Dentro

del body nos gustaría mostrar el mensaje de error si la data no es correcto es es hecho usando el

siguiente código.

También necesitamos codificar nuestro formulario de ingreso de datos. a continuación se muestra

el fragmento de código para el mismo. Note que la funcion “EditorForModel” automáticamente

generara los controles UI de acuerdo a las propiedades del modelo. Entonces no necesitamos

crear el control de forma individual como se hizo en los laboratorios anteriores.

Paso 3: Ahora en la clase controlador Customer.


Ahora en la clase controlador Customer agregamos la validación, cuando el formulario llama un

post sobre el controlador, te gustaría conocer si el estado del modelo es correcto o no. Esto

puede hacerse verificando con la propiedad ModelState.Isvalid. Si la propiedad es válida entonce

llama a procedimiento de guardar o muestra la vista “PostCustomer”(Solo muestra los datos del

formulario), en caso sea falso entonces retorna a la vista original “Home”, a continuación se

muestra el código del controlador.

Paso 4: Probando la Aplicación.

Finalmente presionar Ctrl +F5, y al enviar el control en blanco mostrar el mensaje de error, pero

esta validación se realiza en el servidor, porque el controlador es quien valida.


Nota: Note que se ejecutó la acción post al método del controlador PostCustomer

Paso 5: Habilitando la validación en el cliente

En los pasos anteriores las validaciones se realizan en el lado del servidor, esto significa que al 

momento de enviar el formulario que contiene errores de validación, el control pasa al servidor

solo para regresar con mensajes de error. para evitar este ida y vuelta se puede agregar

capacidades del lado del cliente en la vista Home.cshtml.

La validación en el cliente se puede realizar con jQuery Unobtrusive Validation, para lo cual hay

que referenciarlo en nuestro proyecto. Ejecutar el siguiente comando en Package Manager

Console(Herramientas/Administrador de paquetes de Biblioteca) : PM> Install-Package

jQuery.Validation.Unobtrusive.

Ahora, ubicar el archivo web.config abrirlo y asegurar que existen las siguientes teclas de la

sección <appSettings> las claves ClientValidationEnabled y UnobtrusiveJavaScriptEnabled asignar

el valor true:

Utilizar el ayudante Url.Content () para obtener las direcciones URL de los tres archivos de script,

a saber. jquery-1.4.4.js, jquery.validate.js y jquery.validate.unobtrusive.js. Estos archivos son

necesarios para llevar a cabo la validación del lado del cliente(home.cshtml). 


Paso 6: Probando la Aplicación.

Finalmente presionar Ctrl +F5, entonces la al presionar el botón enviar la validación lo realizará

en el cliente sin ir al servidor.

Otros atributos de anotación de datos


La prueba resultaría:
Lab 12: MVC 4 - Razor

Hasta ahora este artículo ya estuvo usando Razor. Qué es Razor? sola para dar una respuesta

corta. Este es un tipo de vista para MVC. El problema desde el punto de vista Web Form este no

se hizo pensando en MVC, por lo que la sintaxis es un poco pesado.

Paso 1: Practica con sintaxis Razor

Ahora que ya tenemos una idea de lo que es Razor vamos ejecutar algunas sintaxis comunes Razor

y tratar a tener una idea de lo fácil que es Razor comparado con las vistas ASPX.

Práctica 1: Simple línea de código


Si quieres mostrar una simple variable puedes hacer algunas cosas como se muestra en el código

de abajo. Todos la sintaxis Razor empieza con @. Si tiene una simple linea de codigo no necesitas

“{”. Razor se da cuenta de la conclusión lógica.

Si comparas la sintaxis de arriba con una vista ASPX, necesitas tipear el código siguiente. Asi que

¿No es una sintaxis más simple, ordenado y ligero?.

Práctica 2: Múltiples líneas de código

Práctica 3: bucle Foreach y condición If

para bucles y condiciones if llega a ser más simple como se muestra en el siguiente código:

Práctica 4: No te preocupes por @


Si estás pensando si Razor es confuso con @ de Razor y @ de una dirección email, no te

preocupes, Razor entiende la diferencia. Para instanciar en la siguiente línea, la primera linea

Razor ejecutará como un código y la segunda linea de codigo lo entiende solo como una dirección

email.

Práctica 5: Mostrar @

En caso quieras mostrar “@” solo tipea esto cada vez como se muestra en el siguiente codigo.

semostraráa la siguiente imagen.

Práctica 6: Mostrar HTML con Razor

En caso quieras mostrar HTML en el browser. para instanciar una simple variable llamada como

link el cual tiene código HTML. Estoy mostrando la variable link en el browser.

Si ejecutas el código de arriba, te sorprenderias ver que este no se muestra como HTML, sino

como una simple pantalla como se muestra a continuación. ahora como se muestra

acontinuación, Ahora eso no es lo que esperamos. Nos esperábamos una pantalla HTML adecuado.

Esto se hace mediante Razor para evitar ataques XSS(Hablaremos de esto en secciones

posteriores).
Pero no te preocupes, el equipo de Razor se ha hecho cargo de esto. Puedes usar ”Html.Raw”

para mostrar, la misma que se muestra en el siguiente código:

Lab 13: Seguridad MVC(Windows Authentication).

La seguridad es una de las cosas más importantes en cualquier aplicación independientemente,

quien los desarrolla, en cualquier tecnología, lo mismo puede decirse de MVC. 

Antes de empezar este laboratorio una cosa que necesitamos entender es que MVC al final del día

se encuentra en el motor ASP.NET.

Nota: En este artículo no vamos a estar buscando en los fundamentos de la autenticación de

windows y forms.

Vamos a implementar autenticación Windows en una aplicación MVC 4.

Ahora, una manera de implementar autenticación windows es realizando algunos cambios en

nuestro proyecto.
Paso 1: Habilitar la autenticación Windows.

El primer paso es habilitar la autenticación Window. Esto lo realizamos en el archivo de

configuración Web.config usando la etiqueta authentication y authorization que se muestra a

continuación:

Paso 2: Solo algunos defectos.

En la plantilla MVC 4, hay un pequeño defecto. Esto ejecuta la autenticación Forms por defecto.

Establezca las etiquetas debajo de la etiqueta appsetings para evitar problemas.

Paso 3: Aplicando etiquetas de autorización en las acciones del controlador.

una vez que tienes habilitado la autenticación Windows en el Web.config, usar la etiqueta
“[Authorize]” y especificar cuáles usuarios pueden tener accesoa los controladores y sus

acciones.

Por favor note que el usuario deberia estar presente en su windows Active Directory o su grupo

local(en mi caso uso windows 8 y en el administrador de usuarios y grupos- click derecho en

Equipo-> Administrar), como en mi caso el usuario ronald es mi usuario de grupo local.


Paso 4: Crear Aplicación en el Servidor IIS 8( Internet Information Server)

Tienes que asegurarte que tienes instalado el IIS en su equipo para lo cual lo puede verificar en el

Panel de Control-> Agregar o quitar Programas-> Activar características de windows.

Una vez agregado la característica anterior, ahora vamos a crear la aplicación en el IIS con la

habilitación de autenticación Windows solamente.

Cargamos en administrador de IIS y agregamos aplicación con el nombre MvcTercerDia, creamos

un directorio MVC_WINDOWS en donde se publicaran nuestra aplicación desde Visual Studio(esto

lo veremos en el siguiente paso) .


Habilitamos la autenticación Windows en nuestra aplicación creada, seleccionando la opción

Autenticación.

Paso 5: Publicando nuestra Aplicación

Una vez que haz creado la aplicación en IIS, es tiempo de publicar la aplicación a la carpeta de
aplicación web. Para lo cual hacemos click derecho sobre el proyecto( Explorador de proyectos

de Visual Studio) y seleccionamos Publicar.

Le damos la ruta(creada en el paso anterior, cuando creamos la aplicación en IIS) y le damos en

publicar.

Paso 6: Ejecutar el controlador y la acción

Finalmente ejecutar el controlador y la acción(en el navegador digitarlo directamente) y ver

como el cuadro de autenticación Window para el ingreso del usuario y la contraseña. Esto
validará de acuerdo a la autorización que se asignó en el controlador Home.

Si las credenciales son ingresados apropiadamente, deberías ser capaz de ver lo siguiente:

Lab 14: Seguridad MVC(Forms Authentication)

En el laboratorio anterior vimos como hacer autenticación windows. La autenticación Windows es

ideal para sitios web de intranet. Pero como pronto hablaremos acerca de sitios web para

internet, crear y validar usuarios de windows Active Directory/trabajar con grupos de usuarios no

es una opción factible. Entonces en este tipo de escenarios “Forms authentication” es la manera
a seguir.

Paso 1: Definir la pagina Login y su controlador.

La primera cosa que necesitamos es definir el controlador el cual invocará la vista login.

así tengo creado una simple acción index el cual invoca una vista llamado Login. Esta vista Login

tomará entradas como username y password.

Paso 2: Creando la vista Login.

El siguiente paso es crear el formulario Login el cual tomará el username y password. Para crear

el formulario y he usado la vista razor y las clases HTML helperñ En caso tu eres nuevo en clases

HTML helper por favor revisar el Lab 12.

Este formulario HTML hace un post a la acción “Login” del controlador “Home” y es usa el

método Post. Así cuando los usuarios presionan el boton enviar, este lanzara la acción “index”.

Paso 3: Validar las credenciales.

En la acción Index la primera cosa que necesitamos hacer es verificar si el usuario es correcto o
no. Por ahora tenemos en código el usuario y contraseña. Esto puede siempre ser reemplazado

por consultas del servidor SQL o otra fuente.

Una vez que hemos verificado las credenciales el siguiente paso es usar la famosa clase

“FormsAuthentication” y asignar la cookie diciendo que el usuario en correcto.

De modo que en la siguiente solicitud cuando el usuario llegue no tendrá que ser validado una y

otra vez. Despues de que la cookie se establece es redireccionado a la vista “About” o de lo

contrario te quedes en la vista Login.

Paso 4: Atributo Authorize

También necesitamos usar el atributo “[Authorize]” dentro los controladores, los cuales

queremos restringir para los usuarios no autorizados. 

Por ejemplo se puede ver el siguiente código para la acción “Index” del controlador “Home” que

esta decorada con el atributo “Authorize”.


Si cualquier usuario no autorizado, accede directamente a cualquiera de estos controladores ellos

serán enviados a la vista Login es decir detrás del Index.

Paso 5: Cambiar el archivo web.config

Finalmente necesitamos hacer cambio en el famoso archivo “web.config” es decir habilitar la

seguridad “Forms”. la parte mas importante en el código de abajo es la propiedad “LoginUrl”.

Paso 6: Vemos la acción en Autenticación Forms.

Si ahora llamas a index este directamente se muestra la vista Login, este test prueba que la

autenticación “Forms” esta trabajando.


¿Que hay para el cuarto día?

En el cuarto dia veremos una introducción a Jquery, Json, Controlador Asíncrono y diferencia

entre variables Viewdata y Tempdata, Viewbag y Session. 

TUT: Aprender ASP .NET MVC Paso a


Paso en 7 dias(Día 4)
IN ¡, ASP.NET MVC - ON 16:01 - 16 COMENTARIOS

Contenido

¿Cuál es la Agenda?

 Lab 15: JSON, MVC y JQuery

 Lab 16: Gestión de Sesiones en MVC(ViewData, ViewBag, TempData y Variables Sesión)

 Lab 17: Controles Asíncronos


 ¿Que hay para el quinto día?

¿Cuál es la Agenda?

Este artículo es la continuación de Aprender paso a paso en 7 días y puedes revisarlo en los link

siguientes:

 Dia 1: Controladores, vistas fuertemente tipadas y clases helper

 Dia 2: Testeo unitario, ruteo de URL saliente 

 Dia 3: Vistas parciales, anotaciones de datos, Razor, Autenticacion y Autorizacion 

 Dia 4: JSON, JQuery, administrador de sesiones y controladores asíncronos

 Dia 5: Empaquetamiento, Minificacion , ViewModel , Manejo de excepciones y Areas

 Dias 6: MOdos de Visualización, Proveedor MVC OAuth, Enlace Modelo MVC

Lab 15: JSON, MVC y JQuery

En caso seas nuevo en JSON por favor lee esto antes empezar con este laboratorio, Acerca de

JSON.

En este laboratorio vamos a exponer un simple objeto “Customer” de MVC en formato JSON y

consumimos el mismo usando Jquery.

Para este laboratorio por favor asegurarse que el proyecto el nombre del proyecto se

MvcCuartoDia y crearse use la plantilla de proyecto básico esto es necesario para incluir las

librerías Jquery en el proyecto MVC.


Paso 1: Crear un simple modelo Customer

El primer paso es crear una simple clase modelo “Customer” en el proyecto.

Paso 2: Exponer el objeto “Customer” como JSON

Ahora agregamos un controlador “Customer”, para exponer el objeto customer en formato JSON

necesitamos usar “JsonResult” como se muestra en el siguiente código.


Por favor, ejecute el controlador con la acción JSON anterior para comprobar que el resultado

JSON se muestra correctamente. Si estas usando Chrome el resultado se muestra en el

navegador, si este es Internet Explorer este descargara un archivo.

Paso 3: Consumiendo el controlador JSON en Jquery

En caso seas nuevo en Jquery, por favor leer esto ¿Que es Jquery? 

El siguiente paso es consumir los datos JSON usando una vista MVC. Asi que adelante Añadimos

una vista con el nombre AprenderJquery.cshtml

Lo primero es agregar la referencia a la libreria Jquery en la parte superior de la pagina. en caso

no encuentras jquery en el proyecto esto significa que no has creado el proyecto usando la

plantilla basica o sino puedes instalarlo de forma manual usando la Consola de Administracion de

paquetes de Visual Studio, esto lo explico al detalle en el artículo cargar vistas parciales en


ASP.NET MVC usando Jquery Ajax o tambien usando CDN como lo explico es este tips de CDN.

Usando sintaxis html

Usando sintaxis razor

Puedes entonces hacer una llamada al controlador que esta exponiendo en formato JSON usando

el método “getJson” como se muestra más abajo. Este toma tres parámetros:

El primer parámetro en “getJson” es el URL MVC JSON con el formato de estructura

controller/action.

El segundo parámetro es la data a ser pasada. Por ahora esto es nulo como estamos más

interesados en obtener datos JSON en lugar de publicar los datos.

El ultimo parametro es el método de devolución de llamada “Display” el cual será invocado cada

vez que obtengamos datos JSON del controlador. La función ”Display” también está disponible en

el siguiente código. Estoy asignando una alerta con la propiedad name. puedes ver como

solamente tipeo data.CustomerCode, no convierto los datos JSON estos son automáticamente

convertidos a objetos javascript.

El código completo en la vista MVC lo mostramos abajo. Se creado un simple botón HTML y dentro
el evento click en donde se está llamando al método javascript “getJson” el mismo que hace una

llamada al controlador JSON y muestra la data JSON en una alerta javascript.

La vista anterior es invocado usando el método “MostrarJson” del controlador Customer creado

anteriormente.
Paso 4: Ejecutar la aplicación y ver el dato

Después de haber hecho todos los pasos es hora de ejecutar el proyecto(Ctrl+F5) y digitar en la

url http://localhost:50360/Customer/mostrarJson para ver la belleza JSON en ejecución.

Lab 16: Gestión de Sesion en MVC (ViewData, ViewBag, TempData y variables sesión)

La meta principal en MVC es crear aplicaciones web y aplicaciones web usando el protocolo

HTTP. Cuando envías una solicitud a la aplicación MVC se atiende la solicitud y se olvida de la

solicitud. La próxima vez que el mismo usuario envía la solicitud MVC lo trata como una completa

nueva solicitud.

Ahora piensa en la siguiente situación:

 El usuario final envía la solicitud al sitio MVC

 MVC envía una pagina de logueo

 El usuario ingresa detalles adecuados y envía los datos a la aplicación MVC.

 MVC valida el usuario y enviar la página inicial del sitio. La aplicación MVC ahora se olvida

todo lo relacionado con el usuario ya que es apátrida.

 El usuario hace clic en uno de los link de la página inicial. Esto es enviado a la aplicación

MVC y porque la aplicación MVC se ha olvidados de todo lo relacionado con el usuario, le

envía una página de inicio de sesión para la autenticación de nuevo… el usuario se sentirá

extraño..
Este resumen necesitamos tener algunos tipos de mecanismos el cual nos ayudara a recordar

estados entre la solicitud y la respuesta de MVC.

Hay 3 maneras de mantener estados en MVC y estas maneras puede ser usado dependiendo de

que capa a qué capa se navegas.

Temp Data: Ayuda a mantener los datos sobre las redirecciones para una única solicitud y

respuesta. Ahora la redirección puede ser de controlador a controlador o de controlador a vista.

View Data: Ayuda a mantener datos cuando se mueve de controlador a la vista.

View Bag: Este es un contenedor dinámico alrededor de vista de datos. Cuando usamos el tipo

“viewbag” la conversión no es requerido. Utiliza una clave dinámica interna.


Variables sesión: Usando variables sesión podemos mantener datos hasta cerrar el navegador.

Demostraremos los fundamentos anteriores con una demostración.

Paso 1: Crear dos controladores “Default1” y “Default2”.

Agregar dos controladores Default1 y Default2.

Paso 2: Establecer Sesion, tempdata, viewdata y viewbag

En el controlador “Default1” dentro del método “Index” asignamos valores a sesión, tempdata,

viewdata y viewbag como se muestra en el siguiente código. Una vez que hemos asignado los

valores hacemos una redirección a la acción “AlgunaOtraAccion” el cual pertenece al controlador

“Default2”.
Paso 3: Leer valores sesión, tempdata, viewdata y viewbag

En el controlador “Default2” capturamos para leer valores asignados en el controlador

“Default1”. Una vez que los valores son leídos invocamos a la vista llamada “VistaDatos”.

Por favor note que se esta asignando “ViewData” y “ViewBag” antes de redireccionar a la vista.

La vista “VistaDatos” solo muestra los datos presentados en “TempData”, “Viewdata”, “ViewBag”

y “Session”.
Vamo a habilitar un punto de depuración en las acciones de ambos controladores y vamos a ir al

controlador Defualt1 y a su método Index http://localhost:50360/default1/index . En esta acción

las sesión, tempdata, viewdata y viewbag son cargadas. Debajo podemos ver como se muestran

los datos.
Ahora de aquí vamos a redireccionar al controlador “Default2” acción “AlgunaOtraAccion”.

En el controlador podemos ver que obtenemos las variables “TempData” y “Session” pero no

“ViewData y “ViewBag”(Ver str3 y str4 con asignados null). En otras palabras “ViewData” y

“ViewBag” no hacen persistencia de datos en redirección mientras “TempData” y “Session” si lo

hacen.

Cuando la vista se invoca podemos ver todos los datos. En otras palabras los datos “ViewData” y

“ViewBag” persistieron del controlador a la vista. Y también los datos “TempData” y “Session”

persistieron.
Ahora cuando la vista vista invocada he agregado un HiperlInk “Hazme Click” el cual invoca a la

acción “Index” del controlador “Default1”. Esto es para simular una nueva solicitud.

Cuando se hace click en el hipenvinculo. Todas las otras variables se apagan, solo la variable

“Session” persiste.Lo podemos ver en la figura siguiente. Esto significa que las variables “Session”

pueden persistir entre solicitudes.


Debajo está una tabla resumen que muestra los diferentes mecanismo de persistencia.

Lab 17: Controler Asíncronos

Las aplicaciones MVC al final del día son aplicaciones web los cuales son hospedados dentro de

IIS. Ahora cuando cualquier solicitud llega al controlador MVC este genera un hilo del hilo pool y

sirve a esta petición. En otras palabras el servidor Web IIS mantiene un grupo de hilos en lugar de

crear hilos a partir de cero una y otra vez para obtener beneficios de rendimientos.

Vamos asumir que un servidor web ha creado un pool de hilos de tamaño 2. Ahora esto es solo

una suposición porque un pool de tamaño 2 es muy hipotético. Pero para hacer cosas simples

consideramos que los pool de hilos son de tamaño 2.


Vamos a decir primero que la solicitud llega al sitio, IIS tira un objeto de pool de hilo ya realizado

y empieza a servir la petición. Mientras tanto vamo a decir llega la segunda solicitud en lo que de

nuevo el IIS se tira un hilo del pool de hilo y empieza a servir la segunda petición. 

Ahora lo divertido empieza cuando llega la tercera solicitud. El servidor IIS no tiene más objetos

de hilos en el pool como ya ya han sido servidos a “request1” y “request2”. Asi que el servidor

solo mueve la tercera solicitud a un modo de espera o el servidor puede enviar un mensaje ”503

ocupado” para el cliente.

Esta situación es denominado como “Thread Starvation”. Las situación Thread Starvation se

pueden superar al hacer la solicitud “Asincrona”. Así que la petición llega e inmediatamente la

solicitud se procesa de manera “Asincrona” y soltando el hilo que sirva la solicitud

inmediatamente.

Así que para evitar esto podemos lograr lo mismo, haciendo nuestros controladores “Asincronos”.

Ahora vamos a entender paso a paso como implementar controladores asíncronos en MVC.

Paso 1: Heredar de la clase AsyncController


Considerando la siguiente clase controlador “HeavyController” el cual tiene una acción

“AlgunMetodoHeavy” y esta acción espera 20 segundos. Así que vamos a entender cómo podemos

hacer este simple controlador Asynch.

Así que el primer paso es heredar de la clase “AsyncController”.

Paso 2: Marcar métodos con el anexo Async

El siguiente paso es añadir la palabra Async después de los métodos. Asi como podemos observar

“AlgunMetodoHeavy” ha sido cambiado a “AlgunMetodoHeavyAsync”.

La lógica de código de Heavy es decir “Thread.Sleep()” is movido a un metodo diferente y este

método es invocado usando la tarea de la librería paralela de “AlgunMetodoHeavyAsync”.

Cada vez que una “Task” o un “Thread” es iniciado nosotros incrementamos el contador de

OutstandingOperations pero usando “AsyncManager” y cada vez que una tarea multi-threaded es

completada decrementamos el contador.


Paso 3: Crear el método completado

Ahora una vez todas las tareas multi-threaded completadas y el OutstandingOperations esta cero

necesitamos retornar la vista. Asi para el mismo necesitamos crear un metodo ActionResult con la

palabra Completed anexada. Este método se llama cuando todas OutstandinOperations son cero.

Paso 4: Asegurarse de crear la vista “AlgunMetodoHeavy.cshtml”

También asegurarse de agregar la vista “AlgunMetodoHeavy” con el siguiente texto dentro.


Paso 5: Ejecutar y disfrutar

Ahora digitar en el navegador “http://localhost:50360/heavy/AlgunMetodoHeavy” y ver la

salida. 

TUT: Aprender ASP .NET MVC Paso a


Paso en 7 días(Día 5)
IN ¡, ASP.NET MVC - ON 22:02 - 1 COMENTARIO

¿Que hicimos en los últimos 4 días?


Este artículo es la continuación de Aprender paso a paso ASP.NET MVC en 7 días y puedes

revisarlo en los link siguientes:

 Dia 1: Controladores, vistas fuertemente tipadas y clases helper

 Dia 2: Testeo unitario, ruteo de URL saliente 

 Dia 3: Vistas parciales, anotaciones de datos, Razor, Autenticacion y Autorizacion 

 Dia 4: JSON, JQuery, administrador de sesiones y controladores asíncronos

 Dia 5: Empaquetamiento, Minificacion , ViewModel , Manejo de excepciones y Areas

 Dias 6: MOdos de Visualización, Proveedor MVC OAuth, Enlace Modelo MVC

Cual es la agenda
En el dia 5, veremos la manera de empaquetar y minificar para maximizar el
rendimiento de las aplicaciones MVC. También veremos el concepto y ventajas del
modelo de vista que no es sino un puente entre el modelo y la vista.

 Lab 18: Empaquetamiento y Minificación en MVC


 Lab 19: Modelo vista en MVC
 Lab 20: Manejo de Excepciones
 Lab 21: Área MVC
 ¿Que hay para el sexto día?

Lab 18: Empaquetado y Minificación en MVC


Ambos conceptos empaquetado y minificación ayudan a incrementar el rendimiento
Entendiendo el Empaquetado
Siempre los proyectos Web necesitan archivos CSS y JavaScript. Normalmente se
realiza una petición al servidor por cada archivo CSS y JavaScript, y si se tienen
varios de estos archivos hace que la carga de las páginas sean lentas. Empaquetarlos
nos ayuda a combinar múltiples archivos JavaScript y CSS en un solo objeto en
tiempo de ejecución, combinando así múltiples solicitudes en una sola solicitud que a
su vez ayuda a mejorar el rendimiento.
Por ejemplo considere la solicitud de una página en la siguiente imagen. Las
solicitudes son capturados usando la Herramienta de desarrollo de Chrome. Esta
página consume 2 archivos “Javascript1.js” y “Javascript2.js”. Cuando esta página es
solicitada esta hace tres peticiones al servidor.

 Primera para la página “Index”


 Segunda solicitud para el archivo JavaScript “Javascript1.js”
 Tercera solicitud para el archivo JavaScript  “Javascript2.js”

Ahora si piensas  un poco en el escenario de arriba  puede llegar a ser peor si
tenemos muchos archivos javascript(especialmente archivos JQuery) resultado
múltiples solicitudes que reducirían el rendimiento.
Si somos capaces de combinar de alguna manera todos los archivos JS en un solo
paquete y se soliciten como una única unidad, esto se traduciría en un mayor
rendimiento(ver la siguiente imagen que tiene una sola petición).

Entendiendo la Minificación
La minificación reduce el tamaño de los archivos script y CSS, eliminando espacios en
blanco, comentarios, etc. Para el  ejemplo de abajo tenemos un simple código
javascript con comentarios.

Después de aplicar la minificación los codigo javascript se veran como en la imagen


de abajo. puedes ver como son eliminado los espacios en blanco y comentarios para
minimizar el tamaño del archivo e incrementar el rendimiento debido a que el tamaño
del archivo ha sido reducido y comprimido.

Vamos a demostrar un simple ejemplo de empaquetado y minificación con MVC paso


a paso.

Paso 1: Crear un proyecto con la plantilla en blanco


Para entender el empaquetado y minificación, vamos a seguir adelante y crearemos
un proyecto MVC en blanco. En este vamos a agregar una carpeta “Script” y dentro
de este, vamos a agregar dos archivos javascript como se muestra en la siguiente
figura.

El siguiente código es para el archivo “JavaScript1.js”


El siguiente código es para el archivo “JavaScript2.js”

Paso 2: Crear un controlador que llame a una vista


Ahora vamos a seguir y crear a un controlador el cual llame a una vista llamada
“MiVista” es cual consume ambos archivos javascript.

Agregamos la vista MiVista y consumimos los archivos javascript.

Paso 3: Ejecutar y ver como se hacen multiples llamadas


Ahora ejecutamos la aplicación MVC en Google Chrome, Presione la combinación de
teclas Ctrl+Shift+I para ver la siguiente salida. Puedes observar que hay tres
solicitudes.
Paso 4: Referenciando a “System.Web.Optimization”
El empaquetado y minificación es hecho por el namespace
“System.Web.Optimization”. Ahora este DLL no es parte del framework  .NET o
ASP.NET. Necesitamos usar NUGET para descargar esta DLL. Vamos a NUGET y
buscar ASPNET.Web.Optimization.
NUGET es  una herramienta cliente, que se agrega al Visual Studio y nos permite
administrar y consumir paquetes. La galería de NUGET es un repositorio central
usado por todos los autores de paquetes.

Paso 4: El archivo de configuración de paquete


Ahora este paso depende de que tipo de plantilla MVC hemos seleccionado a la hora
de crear nuestro proyecto. Si hubiéramos seleccionado la plantilla “Basic” entonces el
archivo “BundleConfig” ya se crearia y como nosotros hemos seleccionado la plantilla
“Blanco” entonces tenemos mucho trabajo que realizar.
Entonces sigamos y agreguemos la clase “BundleConfig” y creemos un método
“RegisterBundles” como se muestra en el siguiente código.En el código de abajo
“bundles.add” dice que agregue todos los archivos javascript que están dentro de la
carpeta “Scripts” a un paquete llamado “Bundles”.

Nota importante: No olvidar importar el namespaces “System.Web.Optimization” o de


lo contrario se genera un error.

Paso 6:Llamar el archivo de configuracion del empaquetado desde el archivo


global.asax.cs
En este paso no es necesario  si se ha creado el proyecto utilizando la plantilla MVC
“Básico””. Pero como nosotros hemos creado el proyecto utilizando la plantilla MVC
“Blanco”, entonces tenemos que abrir el archivo global.asax.cs y en el inicio de la
aplicación llamar el método “RegisterBudles” como se muestra en el siguiente código.
Paso 7: Enlazar el empaquetado en la vista
una vez que el empaquetado es hecho necesitamos eliminar el tag “script” y llamar la
dll “Optimization” para enlazar el empaquetado.

Debajo esta el codigo en la cual empaquetaremos ambos archivo javascript en un


único objeto, evitando así llamada de solicitud múltiple por cada archivo javascript. En
el empaquetado completo se agrega la vista MVC.

Paso 8: Mirar el empaquetado y minificación en tiempo real.


Para mostrar  el empaquetado y minificación en tiempo real. Ejecutamos nuestro
proyecto en  Google Chrome y presiona la combinación de teclas
CTRL+SHIFT+I(Herramienta del Desarrollador) y puedes ver la magia ahí en donde
se muestra una sola llamada para ambos archivos javascript.
I hacemos click en la pestaña Preview podemos ver que ambos archivos JavaScript
han sido unificados. si la minificacion también se ha realizado Recordemos nuestro
archivo java script original.

Como puedes ver en la salida de abajo, los comentarios han sido eliminado, los
espacios en blanco son removidos y el tamaño del archivo se reduce y es más
eficiente.

Lab 19: Modelo Vista MVC

Teoría
Una vista modelo es una simple clase que representa datos a ser mostrados en la
vista.
por ejemplo abajo esta un simple objeto CustomerModel con  propiedades
“CustomerName” y “Amount”.
Pero cuando el modelo de objeto “Customer” es mostrado en la vista MVC este
muestra algo como se puede observar en la siguiente figura. Este tiene
“CustomerName”, “Amount” y un campo plus  “Customer Buyin Level”.
“Customer Buying Level”(Nivel de compra de clientes) es un indicador de color el
mismo que indica que tan agresivo es la compra de los clientes.
El color de “Customer buying Level”  depende del valor de la propiedad “Amount”. Si
la cantidad es mayor que 2000 entonces el color es rojo, si la cantidad es mayor que
1500 entonces el color es anaranjado y el caso contrario es color es amarillo.
En otras palabras “Customer Buying Level” es una propiedad extra el cual es
calculado en base de la la cantidad(cantidad).

Por lo que la clase  viewmodel “Customer” tiene tres propiedades

 El textbox “TxtCustomerName”  toma datos de la propiedad “CustomerName”


 El textbox “TxtAmount” toma datos de la propiedad “Amount” del modelo como
este es
 “CustomerBuyingLevelColor” muestra el valor del color dependiendo del valor
“Amount”.

¿Que tipo de lógica contendrá la clase view model?


La clase view model puede tener los siguientes tipos de lógica:

 Lógica de transformación de color: Por ejemplo tu tienes una propiedad


“Grado” en el modelo y te gustaria mostrar en la UI el color rojo para el nivel de
grado alto, color amarillo para el nivel de grado bajo y verde para el grado OK.
 Lógica de transformación de formato de datos: Si tu modelo tiene una
propiedad “Estado” con el valor  “Casado” y “Soltero”. En la UI te gustaria
mostrarle como un checkbox  el cual es marcado si “casado” y desmarcado si
es ”soltero”.
 Lógica de agregación: Tienes dos clase modelo diferentes “Cliente” y
“Direccion” y tienes una vista el cual muestra ambos datos “Cliente y
“Dirección” en una sola vez.
 Estructura Downsinzing: Tienes un modelo “Cliente” con propiedades
“NombreCliente” y “CodigoCliente” y quieres mostrar solo ”NombreCliente”.
puedes crear un modelo contenedor alrededor y exponer las propiedades
necesarias.

Vamos hacer un pequeño laboratorio para entender el concepto modelo de vista MVC
usando la siguiente muestra el cual hemos discutido previamente.

Usare el enfoque de arriba hacia abajo para crear la pantalla de arriba:

 Paso 1: Crear el modelo “Customer”


 Paso 2: Crear el ViewModel
 Paso 3: Consumir la ViewModel en la vista.

Paso 1: Creando el modelo Customer


Asi vamos a seguir adelante y crear un modelo “Customer”, en nuestro proyecto
“MVCQuintoDia”, con las propiedades de abajo.
Paso 2: Creando la vista modelo
Lo siguiente es crear una clase ViewModel el cual contendrá al modelo “Customer” y
agregara  propiedades de UI. Asi que vamos a crear una carpeta “ViewModels” y en
esta agregar una clase “CustomerViewModel”.

Abajo va el codigo para la clase “CustomerViewModel”. Ahora  algunos puntos


importantes acerca de la clase view model:

 Puedes ver en la clase de abajo  como la clase “CustomerviewModel” contiene


la clase “CustomerModel”.
 También un punto iimportante que hemos de crear propiedades el cual va con
la convención de nombres de UI(txtName, txtAmount,
lblCustomerLevelColor,etc).
 Ahora para lo mas importante mirar el codigo para a propiedad
“CustomerlevelColor”, este muestra el color dependiendo de la
cantidad(Amount) de ventas del cliente(Customer). Una “ViewModel” existe
para este tipo de código puente,  el cual conecta el modelo y la vista.
Paso 3: Consumiendo el ViewModel en la vista
El siguiente paso es crear un controlador, el mismo que pasa algunos datos  como se
muestra en el siguiente código.
El siguiente paso es crear vista fuertemente tipada, donde podamos consumir la clase
ViewModel. En caso no estes enterado de vistas fuertemente tipadas en MVC por
favor revisar Aprender ASP.NET MVC Dia 1, Laboratorio 04.
Como puedes ver la vista no esta decorada o se puede decir enlazada con la clase
modelo. Lo más importante es mirar que la vista está limpia. Esto no tiene código para
la toma de decisiones para la codificación de colores. Estos código se han incluido
dentro de la clase ViewModel. Esto hace que View Model sea un componente
esencial de MVC.
Paso 4: Probando la Aplicación
Una vez terminado  es momento de probar la aplicación para lo que presionamos
Ctrl+F5.
ViewModel sería Composición o Herencia
Muchos arquitectos cometen errores creando una clase ViewModel como herencia. Si
tu ves arriba la clase ViewModel es creado por composición y no por herencia.

¿Porque composición tiene más sentido? si visualizas nosotros nunca decimos “esta
pantalla es hijo de los objetos de negocio”, eso sería una declaración extraña.
Nosotros decimos “esa pantalla usa esos modelos”. Asi que es muy claro que sea una
relacion usando y no una relacion es un(padres e hijos).
Algunos escenarios donde la herencia fallara:

 Cuando tu no quieres algunas propiedades del modelo en tu vista.


 Cuando tu tienes una vista el cual usa múltiples modelos.

Asi que no sean atraidos por la idea de la cracion de un ViewModel mediante herencia
de un modelo que puede terminar en un problema Liskov.

Esto se parece a un pato, patito como un pato, pero no es un pato. Parece que un
modelo tiene propiedades como un modelo, pero no es exactamente un modelo.
Imagen de http://tomdalling.com

Ventajas de ViewModel
Reusabilidad. Ahora que el código ha sido objeto de una clase. Se puede crear el
objeto de esta clase en cualquier otra tecnologia(WPF, Windows, etc) facilmente.
Testeo: No necesitamos testear manualmente para probar la apariencia de la  UI.
Porque nuestro código  de UI ha sido movido a la librería de clase, podemos crear un
objeto de esta clase y realizar testeo unitario. Debajo un simple código de testeo
unitario, el cual demuestra el testeo unitario de la apariencia de UI y la lógica. Puedes
ver como las pruebas de  color  es realizado automáticamente en lugar  de algunos
testeos manuales.

Lab 20: Manejo de Excepciones

Introduccion
Cuando se trata de manejo de excepciones, el bloque try...catch es la opción favorita
de los desarrolladores .NET. Por ejemplo en el siguiente código hemos envuelto el
código dentro de try..catch y si hay excepciones  invocamos a una  vista “Error” en el
bloque catch.

El gran problema con el código de arriba  es la reusabilidad del manejo del código
excepciones. MVC proporciona a reutilizar el código de manejo de excepciones en
tres niveles:

A través de acciones dentro del mismo controlador: Puedes usar el evento


“OnException” donde escribes la lógica  el mismo que puede ser reutilizado a través
de “Acciones” dentro del mismo controlador.
A través de  cualquier controlador: En MVC podemos usar  “FilterConfig” para crear
un atributo el cual será aplicado a cualquier controlador y cualquier accion.
A nivel de proyecto: manejando UsingApplication_Error en Global.asax.  Así que
cuando la excepción se genera desde cualquier parte del proyecto MVC, este será
ruteado a un manejador de error central.
Vamos paso a paso a demostrar  las 3 maneras de arriba del manejo de errores en
MVC.

Paso 1: Agregar un controlador y la acción que lanza el error


Así que lo primero es agregar un simple controlador y la acción que lance algunos
tipos de excepciones. En el siguiente código puedes ver que hemos agregado un
controlador  “TesteandoControlador” con una acción “TestearMetodo”, donde hemos
lanzado una excepción de división por cero.

Por lo que si ejecutar  la acción anterior terminará con un error como se muestra en la
siguiente figura.
Paso 2: Crear una vista Error
Ahora una vez que el error es capturado  por cualquiera de los tres métodos descritos
anteriormente nos gustaría lanzar una página de error para mostrar el propósito. Por
lo que vamos a crear una simple vista por nombre “Error” como se muestra en la
siguiente imagen.
Ahora que tenemos una error y también una vista “Error”  es tiempo de hacer la
demostración usando las tres maneras. Por lo que primero vamos a empezar con
“OnException” es decir código reutilizable  en acciones pero dentro del mismo
controlador.

Paso 3: Reutilizar a través de  acciones dentro del mismo


controlador(OnException)
Para implementar la excepción vamos al controlador “TesteandoController”  y
sobreescribimos  el método “OnException”  como se muestra en el siguiente código.
Este método se ejecuta cuando ocurre  cualquier error en cualquier acción del
controlador “TesteandoController”.
La nombre de vista es decir “Error” es asignado a la propiedad result del objeto
“FilterContext” como se muestra en el siguiente código.
Ahora si  ejecutas la aplicación(CTRL+F5),  llamando a “TestearMetodo” del
controlador “TesteandoController”, se verá la vista “Error” como la siguiente
imagen(Ojo en entorno de desarrollo se lanzará el error en Visual Studio, pero en
entorno de ejecución se lanzará la vista “Error”, pasar por alto en Visual Studio para
ver el error).

El método “OnException”  ayuda a proporcionar manejador de excepciones para un


controlador específico pero que si queremos reutilizar la lógica de excepción a
cualquier otro controlador y cualquier acción esto no se podría. Es donde tenemos
que utilizar “FilterConfig” una manera en la cual hablaremos en el siguiente paso.
Paso 4: Reutilizar a cualquier acción y cualquier controlador(FilterConfig)
Dentro de Web.Config simplemente habilitamos “CustomErrors” como sigue.

Dentro de la carpeta App_Start abrimos FilterConfig.cs y nos aseguramos que


HandleErrorAttribute es agregado a GlobalFilterCollection.

HandleErrorAttribute  en el nivel global confirma que la excepciones lanzadas por


cada acción en todos los controladores serán manejados.
En el archivo Global.asax dentro de Application_Start el método RegisterGlobalFilters
es invocado.
Esto hace que todas las excepciones lanzadas por cualquier método dentro de todos
los controladores retornen la vista “Error” presente dentro la carpeta Shared.

Manejo de error a nivel de controlador, en donde todos los errores presentes en las
acciones del controlador “TesteandoController” serán administrados.

Para hacer que nuestra vista “Error” una vista fuertemente tipada del Modelo
System.Web.Mvc.HandleErrorInfo y entonces usar la palabra clave @Model para
acceder a sus miembros. Uno de sus miembros es el objeto Exception.
El resultado sería el detalle de la vista Error.

Paso 5: Manejo de error a través de proyecto(Application_Error).


Para administrar errores a través de proyecto MVC, podemos usar numerar a el
evento “Application_Error” dentro del archivo Global.asax y escribir la lógica de
manejo de error dentro el mismo.
Application_Error es un evento a nivel de aplicación, podemos definir dentro del
archivo Global.asax. El mismo será ejecutado cada vez que hay una excepción no
controlada en la aplicación.
Si este  es el punto, ¿Porque no usar Application_Error siempre?
Aqui estan la ventajas de HandleError sobre Application_Error:

 Con HandleErrorAttribute obtenemos más control sobre el manejo de


excepciones. HandleError nos permite administrar errores diferentes para
diferentes controladores y acciones facilmente  donde en Application_Error
para obtener esta característica se toma la ayuda del bucle interruptor.
 Una vez que este en Application_Error estas fuera de MVC y perderás
ControllerContext y entonces no puedes hacer cosas fácilmente posibles con
HandleError.

Lab 21: Área MVC

¿Que es un área y porque área?


En ASP.NET MVC tenemos un concepto de areas el cual nosotros podemos partir
nuestro sistema en modulos y organizar  nuestro proyecto  de una mejor manera.
Asumo que tenemos un sistema el cual consiste de dos módulos Customer y Order
Processing. Normalmente cuando creamos un proyecto ASP.NEt MVC nuestra
estructura consite de 3 carpetas(Controller, Model y Views).  Entonces la estructura
sería como esto.

Como puedes ver no esta organizado. Cuando se trata de administrar código será
muy difícil.
La imagen presenta una estructura de proyecto con e módulos. Imagina una situación
donde tengamos cientos de módulos en nuestro sistema.

Ejemplo de áreas en el mundo real


Los paises estan divididos por estados  para que el desarrollo y la administración sea
fácil.

Justo como el mundo real usaremos el concepto de area en ASP.NET MVC para
dividir nuestro sistema en modulos. Un área representa un modulo pero significa
agrupación lógica de controladores, modelos y vistas.

¿Como Usar Áreas?

Paso 1: Agregar Áreas usando una Plantilla MVC


Para agregar área hacer click derecho en el proyecto y seleccionar Add>>Área como
se muestra en la imagen siguiente:

Paso 2: Comience ubicando archivos pertinentes a áreas pertinentes.


Ubicar todos los archivos relacionado a áreas respectivas como se muestra en la
siguiente figura. Dentro de la figura de abajo se puede ver que hemos creado dos
áreas “Customer ” y “Order”, Y cada uno de estas áreas tiene sus propias Vistas,
Controladores y Modelos.
Nota: El Área es una agrupación lógica no física, por lo que no  se crean dlls
separadas por cada área.

¿Cual es la diferencia entre áreas y carpetas?


Uno se puede hacer la pregunta porque debemos usar para nuestro sistema areas
para separar en modulos cuando podemos simplemente utilizar las carpetas. En
pocas palabras, la respuesta para esta pregunta es “Para evitar el enorme trabajo
manual”.

Para lograr la misma funcionalidad utilizando carpetas se tiene que hacer las siguiente
cosas.

 Crear la estructura del módulo manualmente( Una carpeta por cada módulo,
Tres carpetas adicionales por cada módulo llamado COntroller, Views y Model,
un archivo Web.Config por cada módulo)
 Crear una ruta personalizada por cada módulo Controller.
 Crear un motor de vista personalizada para cada módulo  para  buscar  la vista
en lugares personalizados en lugar de ubicaciones
predefinidas(Views/{Controller} ó Views/Shared).

Buscar Vista por defecto


Buscar vista Personalizada

¿Que hay para el sexto día?

TUT: Aprender ASP .NET MVC Paso a


Paso en 7 días(Día 6)
IN ¡, ASP.NET MVC - ON 13:07 - 20 COMENTARIOS

¿Que hicimos en los últimos 5 días?


Este artículo es la continuación de Aprender paso a paso ASP.NET MVC en 7 días y puedes

revisarlo en los link siguientes:

 Dia 1: Controladores, vistas fuertemente tipadas y clases helper

 Dia 2: Testeo unitario, ruteo de URL saliente 

 Dia 3: Vistas parciales, anotaciones de datos, Razor, Autenticacion y Autorizacion 

 Dia 4: JSON, JQuery, administrador de sesiones y controladores asíncronos

 Dia 5: Empaquetamiento, Minificacion , ViewModel , Manejo de excepciones y Areas

¿Cuál es la agenda para este dia 6?


Para el día 6 tenemos 5 grandes laboratorios:.

 Lab 22: Modos de Visualización(MVC para móviles).- Soporte móvil usando la


característica “DisplayMode”
 Lab 23: Proveedor MVC OAuth.- Integrar la aplicación usando Facebook,
Twitter o cualquier otros sitios usando “OAuth”.
 Lab 24: Enlazador de Modelo MVC: Uso de enlazadores de modelos para
enlazar la interfaz de usuario y las clases del modelo, si los nombres de
propiedad son diferentes.
 Lab 25: Diseño Razor.- Sintaxis Razor
 Lab 26: Métodos de ayuda Html Personalizado.- Creando tu propio motor de
vista personalizado.
 ¿Que hay para el último día?

Lab 22: Modos de Visualización(MVC para móviles)

Introducción
Este es un mundo de pequeños dispositivos es decir móviles. Como un desarrollador
MVC se espera un gran apoyo de la plantilla MVC de Microsoft para el mismo. Ahora
las pantallas de escritorio y pantallas de móviles tienen una alta variación en tamaño.
Si nos gustaría crear diferentes pantallas para escritorio y diferentes pantallas para
móviles. Por ejemplo creariamos “Home.aspx” para escritorio normal y
“Home.mobile.aspx” para móvil. Si MVC puede automáticamente detectar el tipo de
dispositivo y redireccionar a la página apropiada esto salvaría mucho trabajo. Esto es
automatizado usando “MVC Display Mode”.
Cuando cualquier solicitud HTTP llega a la aplicación web esta solicitud HTTP tiene
un valor llamado “User Agent”. Este valor “User Agent” es usado por el modo de
visualización MVC(MVC display mode) y la vista apropiada es recogido y
redireccionado por el dispositivo. Vamos hacer una demo y ver en directo.

Paso 01: Crear Paginas apropiadas


Así que vamos a crear un proyecto de ejemplo MVC con el nombre MVCSextoDiay y
de tipo Basico. Luego vamos agregar 2 vistas “index.aspx” para escritorio y
“Index.Mobile.cshtml” para movil como se muestra en la siguiente figura.

Nota: El nombre de la vista “Index.Mobile” tiene que ser igual para que lo reconozca
como una viasta para dispositivos móviles. Adicionalmente en esta vista se debe
introducir un texto  identificativo por ejemplo:”Este es para Pantallas Pequeñas
Móviles”.

También vamos agregar un controlador llamado ”Inicio” en cual invocará a la vista


“index”.

Nota: Puedes  ver en el siguiente código que hemos creado un action result  como
index. Porque nuestro nombre de vista y nombre de accion son los mismos, nosotros
no necesitamos pasar el nombre de la vista dentro de “return view()”.
Paso 02: Eso es todo, así que vamos a probar
Y esto es todo lo que necesitamos hacer. Ahora vamos a ir y probar si el modo de
visualización MVC hace honor a su promesa.
Ahora si vas e ingresar el controlador y la acción en el navegador verás como la
imagen izquierda de abajo. Si ingresas el mismo controlador y acción usando el
emulador de móviles android tu verás la pantalla de la imagen derecha.

Nota: Para probar simulación para móviles en este laboratorio hemos usado el
simulador “Opera Mobile”. Tu puedes descargar el emulador de
http://www.opera.com/es/developer/mobile-emulator

Paso 03: Más personalización y control


Pero que si queremos más personalización y control.
Si el escritorio muestra “Index.cshtml”
Si el móvil muestra “Index.mobile.cshtml”
Si el móvil Android muestra “Index.Android.cshtml”
Tenemos ya implementado las primeras dos condiciones. Ahora para la tercera
condición necesitamos realizar algunos pasos extras. Relajate son absolutamente
pequeños y fáciles pero con gran resultado final.
Primer paso es agregar una pagina mas “Index.Android.cshtml” especialmente para
Android en la carpeta Vista como se muestra en la siguiente imagen.

El siguiente paso el hacer más cambios en el archivo “Global.asax.cs”.


a. El primer paso es agregar el espacio de nombre “System.Web.WebPages” como se
muestra en la siguiente figura.

b. Segundo paso es usar la clase “DisplayModeProvider” y agregar una entrada


“Android” dentro de la colección “Modes” como se muestra en el código  de abajo. El
siguiente código busca para la cadena “Android” y si encuentra esto captura y
redirecciona a la página “Index.Android.cshtml”.

Paso 04: Probar la personalizacion de Moviles


Ahora si ejecutas el simulador de Opera Mobile con Android como un usuario agente
como se muestra en la siguiente imagen, veras la pagina
Android(Index.Android.cshtml) redireccionado.
Lab 23: Proveedor MVC OAuth

Una de los más procesos aburridos para  un usuario final es registrase en un sitio.
Algunas veces esos largos formularios y correos de validación sólo posterga el
usuario. Entonces cómo hacer las cosas fáciles mediante la validación de los usuarios
utilizando sus cuentas existentes de Facebook/Twitter/Google/LinkedIn/etc. Entonces
el usuario usa algo que ya tiene mientras el sitio asegura que este usuario es un
usuario propietario.
Esto es logrado usando MVC OAuth(Open Standard for Authorization).

Para implementar OAuth esto es en un proceso de tres pasos.


 Registrar la aplicación y obtener el ID y Clave.
 Realizar la autenticación con el sitio de terceros.
 Una vez autenticado hace navegar el sitio.

Paso 1: Registrar la aplicación y obtener el ID y la Clave


Entonces el primer paso es registrar la aplicación con el sitio de terceros. Para este
laboratorio usaremos Google para la autenticación abierta. Por favor nota este paso
varía para Twitter, Facebook y otros sitios. Ir a https://console.developers.google.com/
, crear un proyecto

Seleccionar el proyecto y en la columna lateral izquierda la opcion Credentials

En el siguiente apartado especificamos el tipo de aplicación, en nuestro caso una


aplicación web e indicamos que la URL es http://localhost.
Pulsamos el botón “Create Cliend ID”  y nos llevará al panel de control donde
podremos ver el API Key generado que tendremos que configurar más adelante en
nuestra aplicación.
Paso 2: Crear un sitio MVC para autenticación con OAuth
Ahora que tenemos el ID sigamos adelante y crear una Aplicación de Internet.
Estamos creando una aplicación de internet para que podamos obtener algo ya hecho
o se puede decir codigo plantilla para OAuth.
Una vez que el proyecto es creado abrir la clase “OAuthConfig.cs”  del folder
“App_start”.

En este archivo de configuración encontrarás el método “RegisterAuth”, lo habilitamos


para GoogleCliente.
Paso 3: Iniciar el navegador
Esto es todo lo que hay que hacer, ahora ejecutar la aplicación y dar click en “Iniciar
Sesion”

La siguiente pantalla presenta dos opciones, en el lado izquierdo donde puedes


loguearte de forma local usando la autenticación “Forms” y en la derecha dispones de
proveedor de terceros. Clickear en el botón Google e ingresar las credenciales de la
cuenta.

Lab 24: Enlazador de Modelo MVC


Introducción
El siguiente código es un simple formulario HTML hace un post a “SubmitCustomer”
La acción “SubmitCustomer” esta dentro de un objeto Customer. Este objeto
“Customer” es producido automáticamente con los datos que son llenados en los
cuadros de texto, sin ningún tipo de unión o asignaciones.

¿Conoces porque el objeto Customer llena automáticamente?. Esto es porque el


nombre de los cuadros de textos y la propiedad nombre de la clase “Customer” son
iguales.

Pero que si los nombres de los cuadros de texto no son iguales a los nombres de las
propiedades de la clase “Customer”.
En otras palabras el nombre del textbox HTML es “txtCustomerCode” y el nombre de
la propiedad  de la clase es “CustomerCode”. Aquí es donde los enlazadores de
modelo entran como se puede ver en la siguiente imagen.

Model binder mapea los elementos HTML del formulario al modelo. Este actúa como
un puente entre la interfaz de usuario HTML y el modelo MVC. Así que vamos hacer
algunos manejos para ejercicio con “ModelBinder”.

Paso 1: Crear “EnterCustomer.cshtml” y el controlador


El primer paso es crear una vista “EnterCustomer.cshtml” dentro de nuestro proyecto
ya creado “MVCSextoDia”, el cual tomará datos de “Customer”
Para invocar este formulario necesitamos una acción en el controlador “Customer”
porque no podemos invocar directamente a un vista en MVC, necesitamos hacerlo vía
un controlador.

Paso 2: Crear el modelo Customer


El siguiente paso es crear un modelo “Customer”. Por favor nota la propiedad nombre
de la clase “Customer” y el nombre de los cuadros de texto de la UI HTML son
diferentes.

Paso 3: Crear el enlace que hace el mapeo


Ahora debido que los nombres de los elementos de la UI y la clase “Customer” tienen
diferentes nombres necesitamos crear el enlazador “Model”. Para crear la clase
enlazador de modelo necesitamos implementar la interfaz “IModelBinder”. Pa lo cual
agregamos una clase “CustomerBinder” dentro de la carpeta Controller. En el
siguiente código puedes ver como hemos escrito el código de mapeo dentro del
método “BindModel”.
Paso 4: Conectar el mapeador con la acción
Ahora que tenemos en conector, tenemos la UI HTML entonces es tiempo de
conectarlos. miramos en la acción “SubmitCustomer” del siguiente código.
el atributo “ModelBinder”  conecta con el objeto “Customer”.
Paso 5: Disfruta la salida
Ahora al ingresar la acción “EnterCustomer” el cual incova formulario de entrada de
Customer.

Cuando llenas los datos y haces click en el botón Enviar, veras que se llena el objeto
“Customer” con un punto de interrupción, con en la siguiente imagen.

Lab 25: Diseño  Razor


Introducción
Layouts son como paginas maestras en ASP.NET web form. Páginas Maestras dan
como un aspecto estándar para las vistas Web Form(ASPX) mientras que layout dan
una vista estándar para las vistas Razor(CSHTML). En caso seas nuevo en Razor ver
el Lab 12: Vistas Razor MVC.
En este laboratorio veras como implementar  Diseño Razor.

Paso 1: Crear una página de diseño


Lo primero que nosotros necesitamos crear es una pagina de diseño. Dentro de
nuestro proyecto web MVCSextoDia, vamos a la carpeta vista y hacemos click
derecho , agregar nuevo elemento y seleccionar la plantilla “Página de Diseño de
MVC 4” como se muestra en la siguiente imagen.
En la página de diseño MC necesitamos definir la estructura común el cual será
aplicado a todas las páginas razor. Puedes ver en la siguiente diseño de página
tenemos tres secciones Cabecera, cuerpo y pie. La cabecera y el pie son secciones
personalizados mientras “RenderBody”  es algo que viene de MVC y muestra en el
contenedor body.

Paso 2: Crear vista y aplicar el diseño


Ahora una vez que hemos creado el diseño los siguiente es aplicar esto a las vista.
Para aplicar el diseño de página, seleccione el botón “...” como se muestra en la
anterior imagen, y seleccione el diseño de página como se muestra en la siguiente
imagen.
Una vez que la vista es creada la primera línea de código indica que diseño de página
esta usando. esto se ve como el siguiente código.

Ahora lo final es en la vista llenar todas las secciones. Las secciones Pie y cabecera
son secciones personalizadas así que necesitamos usar el comando @section
seguido por el nombre de la sección y despues lo que queramos asignar en esas
secciones. Todos los otros textos  son parte del body(@RenderBody).

Paso 3: Crear un controlador y ver el diseño en acción


Ahora que tenemos todo asignado es tiempo de crear un controlador y método para
invocar la vista.
Deberías ver una cosa como se ve en la siguiente imagen. puedes ver como la
plantilla de diseño es aplicado a la vista.

Lab 26: Métodos Personalizados HTML Helper


Introducción
En el dia 1 hablamos acerca de clases MVC Helper. Esto nos ayuda a trabajar con
controles de ingresos de una manera más eficiente. Cuando tipeas “@Html” en una
vista  MVC Razor se consigue algo como esto en IntelliSense.
El método Html Helper nos crea controles de entrada Html como Textbox, Radio
button, Checkbox, Text Area de una manera facil y rapido. En este laboratorio vamos
a dar un paso adelante y crear métodos Helper personalizados.
Para crear método Html Helper Personalizados, necesitamos usar extensión de
métodos. Extensión de métodos es un concepto que fue introducido en .NET 3.5.

Paso 1: Agregar una simple clase


Vamos a trabajar con nuestro proyecto proyecto MVCSextoDia. Agregar un
controlador llamado EjemploHelper y un método llamado Index. Crear una nueva
carpeta dentro del proyecto MVC llamado ExtensionClases.

Paso 2: Marcar la clase como estática y agregar métodos.


Para el método de extensión necesitamos agregar una clase como estática.
en este clase vamos a crear un nuevo método estático llamado “HolaMundoLabel” el
cual retornará un valor de tipo MvcHtmlString y aceptando un parámetro HtmlHelper.

Nota: Asegurar agregar la palabra “this” antes de declarar el primer parámetro porque
el objetivo es crear un método extensión para la clase HtmlHelper.
Paso 3: Usa la clase Helper
El paso final es importar el espacio de nombres “System.Web.Mvc.Html”. necesitamos
importar este espacio de nombre, porque por defecto TextBoxFor, TextAreaFor y otros
métodos de extensión de HTML Helper estén disponibles dentro de este espacio de
nombres. Se requiere solo si vamos a usar uno de estos métodos de extension.
Simplemente escribimos el siguiente código en la vista y construir el proyecto.

Nota:Note que en la parte superior se asignó la sentencia using que referencia a la


clase extensión creada previamente.

Construya la aplicación, presionando F5 y probar la aplicación.

¿Que hay para el último dia?


El último día será principalmente en cómo integrar los Framework JavaScript de
Angular y KO con MVC.

También podría gustarte