Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Este artículo es parte de Aprender paso a paso ASP.NET MVC en 7 días y puedes revisarlo en los
link siguientes:
Contenido
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)
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.
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.
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.
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.
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”
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
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.
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.
el primer paso es crear un controlador y agregar una simple acción que muestre el
Customer.
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).
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:
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.
Necesitamos obtener los datos de los controles HTML(form), llena el objeto y enviar el
objeto a la vista.
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.
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 razor HTML “BeginForm” toma tres parámetros nombre de la acción, el nombre del
controlador y el método HTTP(GET, POST).
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.
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.
Contenido
¿Cuál es la Agenda?
Lab 08: Validando y Asignando Valores por defecto a las URLs en MVC
¿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:
Cuando empezamos toda la serie MVC(Dia 1) empezamos con dos problemas relacionados al code-
behind.
¿Como podemos reusar el code behind de ASP.NET con diferentes interfaces de usuarios?
problemas:
¿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,
Asi que lo que haremos en esta sección es crear una simple aplicación MVC y haremos teste
temos creado en MVC(Modelo Vista Controlador) del dia 1(MyFirstHelloWorld). En caso no tengas
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
Una vez que tengas agregado la referencia, abre la clase de prueba unitaria,es
Una vez escrito la prueba es tiempo de ejecutar caso de prueba para lo cual vamos hacer click en
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
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
.
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
seccion anterior.
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
Name es el nombre principal por la cual la ruta será identificada dentro la colección.
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
pedazo de codigo, nosotros hemos usado { para especificar que podemos tener un parámetro id.
DisplayCustomer.
Nota: No muestra ningún nombre, porque esto tiene que ser enviado del formulario, y puedes
Si recuerdas nosotros comentamos la entrada de ruta por defecto(default), vamos a entender qué
con Customer y función acción como Search entonces el URL será estructurada automáticamente
como htt://www.maninformatic.com/Customer/Search.
Seria bueno si pudiéramos validar los datos que se transmiten a través de estas URL de MVC.
http://localhost/Customer/ViewCustomer/1001.
El código de Customer es un número natural. En otras palabras, cualquier persona que ingrese
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.
En este primer paso vamos a trabajar con nuestra simple clase modelo Customer ya creada en los
pasos anteriores.
En el siguiente paso vamos a utilizar la clase controlador Customer ya creada en pasos anteriores
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
Puedes especificar los valores por defecto diciendo id=0 como se muestra en el código de abajo.
esta validación trabaja. La primera prueba tenemos que especificar 1 y veremos que el
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
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
Pero haciendo esto estas violando los principios de MVC. Los principios MVC dicen que la llamada
Lo ideal es que las acciones deberían direccionar a las páginas. Los enlaces deberían tener
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
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
Para invocar las acciones relacionadas a las vistas necesitamos especificar las acciones en la
El código de arriba fue para la vista Product, pues hacer lo mismo para las vistas About y Home.
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.
Es la tercera sesión, hablaremos acerca de vistas parciales, validación usando notaciones de data,
más. Los siguientes laboratorios podrían ser mucho más avanzados comparados al segundo día.
¿Cuál es la Agenda?
¿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:
Vistas paciales
Razor(MVC 4)
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.
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.
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 validación de data es una de las principales cosas en cualquier aplicación web. Como
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
Las Anotaciones de data son metadata el cual puedes aplicar en el modelo en el framework MVC
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
Asumiendo que tienes creado el modelo y la vista fuertemente tipada, vamos a empezar a aplicar
Anotaciones de Data.
abajo.
Vamos a decir que tenemos un modelo Customer y queremos asegurar que el campo código es
obligatorio.
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.
generara los controles UI de acuerdo a las propiedades del modelo. Entonces no necesitamos
post sobre el controlador, te gustaría conocer si el estado del modelo es correcto o no. Esto
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
Finalmente presionar Ctrl +F5, y al enviar el control en blanco mostrar el mensaje de error, pero
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
La validación en el cliente se puede realizar con jQuery Unobtrusive Validation, para lo cual hay
jQuery.Validation.Unobtrusive.
Ahora, ubicar el archivo web.config abrirlo y asegurar que existen las siguientes teclas de la
el valor true:
Utilizar el ayudante Url.Content () para obtener las direcciones URL de los tres archivos de script,
Finalmente presionar Ctrl +F5, entonces la al presionar el botón enviar la validación lo realizará
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
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.
de abajo. Todos la sintaxis Razor empieza con @. Si tiene una simple linea de codigo no necesitas
Si comparas la sintaxis de arriba con una vista ASPX, necesitas tipear el código siguiente. Asi que
para bucles y condiciones if llega a ser más simple como se muestra en el siguiente código:
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.
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”
Antes de empezar este laboratorio una cosa que necesitamos entender es que MVC al final del día
windows y forms.
nuestro proyecto.
Paso 1: Habilitar la autenticación Windows.
continuación:
En la plantilla MVC 4, hay un pequeño defecto. Esto ejecuta la autenticación Forms por defecto.
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
Tienes que asegurarte que tienes instalado el IIS en su equipo para lo cual lo puede verificar en el
Una vez agregado la característica anterior, ahora vamos a crear la aplicación en el IIS con la
Autenticació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
publicar.
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:
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.
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
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
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”.
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
Una vez que hemos verificado las credenciales el siguiente paso es usar la famosa clase
De modo que en la siguiente solicitud cuando el usuario llegue no tendrá que ser validado una y
También necesitamos usar el atributo “[Authorize]” dentro los controladores, los cuales
Por ejemplo se puede ver el siguiente código para la acción “Index” del controlador “Home” que
Si ahora llamas a index este directamente se muestra la vista Login, este test prueba que la
En el cuarto dia veremos una introducción a Jquery, Json, Controlador Asíncrono y diferencia
Contenido
¿Cuál es la Agenda?
¿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:
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
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
Ahora agregamos un controlador “Customer”, para exponer el objeto customer en formato JSON
El siguiente paso es consumir los datos JSON usando una vista MVC. Asi que adelante Añadimos
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
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:
controller/action.
El segundo parámetro es la data a ser pasada. Por ahora esto es nulo como estamos más
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
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
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
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.
MVC valida el usuario y enviar la página inicial del sitio. La aplicación MVC ahora se olvida
El usuario hace clic en uno de los link de la página inicial. Esto es enviado a la aplicación
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
Hay 3 maneras de mantener estados en MVC y estas maneras puede ser usado dependiendo de
Temp Data: Ayuda a mantener los datos sobre las redirecciones para una única solicitud y
View Bag: Este es un contenedor dinámico alrededor de vista de datos. Cuando usamos el tipo
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
“Default2”.
Paso 3: Leer valores sesión, tempdata, viewdata y viewbag
“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
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
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”
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
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
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
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.
“AlgunMetodoHeavy” y esta acción espera 20 segundos. Así que vamos a entender cómo podemos
El siguiente paso es añadir la palabra Async después de los métodos. Asi como podemos observar
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
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.
salida.
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.
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.
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.
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).
Vamos hacer un pequeño laboratorio para entender el concepto modelo de vista MVC
usando la siguiente muestra el cual hemos discutido previamente.
¿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:
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.
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:
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.
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.
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.
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.
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).
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.
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”.
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
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).
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”.
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.
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).
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.