Professional Documents
Culture Documents
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 tecnologías (para los amantes de Microsoft y para los amantes del software
libre).
Pueden revisar Aprender SPRING MVC Paso a Paso en 7 días (Día 1)
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 más acerca del diseñador de la interfaz de usuario, y la lógica
de acceso a datos son más o menos componentes estándar como los Enterprise Data Blocks.
Vamos a analizar los problemas.
Por ejemplo digamos que el mismo código del botón 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.
Como este Controlador es una simple clase .NET, podemos reusarlo y hacer testeos unitarios
facilmente. Vamos a ver cómo podemos crear Aplicación MVC usando la Plantilla MVC proveída
por Visual Studio.
Pre-Requisitos
- Visual Studio 2012 (Cualquier versión). Esto incluye ASP.NEt MVC 4
Lab 01: Creando una simple Aplicación 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.
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 página 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 página ASPX con el siguiente código 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.
Abajo está el código 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 está por debajo de 100.
Paso 04: Ejecuta la aplicación
Ahora para ejecutar la aplicación presiona Ctrl+F5.
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 más importante a notar es que la acción del botón es
apuntada al método del controlador llamado “DisplayCustomer”.
Para ayudarnos de Visual Studio y como ya sabemos toda página está relacionada a una acción
del controlador en el controlador Customer vamos a crear el metodo FillCustomer.
Después siguiendo los pasos anteriores de cómo 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.
Los Código HTML fueron escritos manualmente. En pocas palabras esto fue poco
productivo, esto es como escribir código 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 cómo 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).
Muy bien, ahora vamos por unas por unas cheliñas para celebrar el cumplimiento de nuestro
primer dia con ASP.NET MVC.
¿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 días y puedes revisarlo en los link siguientes:
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:
Si tú 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 entonces 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.
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.
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 tú necesitas llamar el método
MapRoute y pasar tres parámetros name, url y defaults.
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á estructurado automáticamente como
htt://www.maninformatic.com/Customer/Search.
Sería 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.
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:
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.
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.
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.
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.
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 más que a los nombres de las paginas
como home.aspx, aboutus.aspx el cual viola completamente los principios MVC.
¿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:
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.
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 vía HomeControlles.aspx.
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.
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.
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 esta 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.
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 pesada.
Si comparas la sintaxis de arriba con una vista ASPX, necesitas tipear el código siguiente. Así que ¿No es una
sintaxis más simple, ordenado y ligero?.
Práctica 2: Múltiples líneas de código
Práctica 5: Mostrar @
En caso quieras mostrar “@” solo tipea esto cada vez como se muestra en el siguiente código. Se mostrará 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 sorprenderías ver que este no se muestra como HTML, sino como una simple
pantalla como se muestra a continuación. Ahora como se muestra a continuació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:
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.
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.
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 ingresadas apropiadamente, deberías ser capaz de ver lo siguiente:
Así tengo creado una simple acción index el cual invoca una vista llamado Login. Esta vista Login tomará
entradas como username y password.
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.
Después 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 está 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.
¿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:
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.
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.
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 librería Jquery en la parte superior de la página. en caso no encuentras
jquery en el proyecto esto significa que no has creado el proyecto usando la plantilla basica o si no puedes
instalarlo de forma manual usando la Consola de Administración 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 también usando CDN
como lo explico es este tips de CDN.
Puedes entonces hacer una llamada al controlador que está 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 último 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 invocada usando el método “MostrarJson” del controlador Customer creado
anteriormente.
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 pueden ser usadas dependiendo de qué 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 requerida. 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.
Por favor note que se está asignando “ViewData” y “ViewBag” antes de redireccionar a la vista.
La vista “VistaDatos” solo muestra los datos presentados en “TempData”, “Viewdata”, “ViewBag” y “Session”.
Vamos 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 la 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 hipervínculo. 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 mecanismos de persistencia.
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 vamos 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 denominada como “Thread Starvation”. La 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.
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.
Cuál es la agenda
En el día 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.
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 sea 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
capturadas 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 códigos javascript se verán como en la imagen de abajo.
Puedes ver como son eliminados 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.
Debajo está el código 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 esta 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).
¿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 relación
usando y no una relación es un (padres e hijos).
Algunos escenarios donde la herencia fallara:
Así que no sean atraídos por la idea de la creación 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 tecnología (WPF, Windows, etc) fácilmente.
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:
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.
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 un 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.
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.
Justo como el mundo real usaremos el concepto de área en ASP.NET MVC para dividir nuestro
sistema en módulos. Un área representa un módulo pero significa agrupación lógica de
controladores, modelos y vistas.
Nota: El Área es una agrupación lógica no física, por lo que no se crean dlls separadas por cada
área.
Para lograr la misma funcionalidad utilizando carpetas se tiene que hacer las siguientes 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
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:
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 crearíamos “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
vista 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 acción son los mismos, nosotros no necesitamos pasar el
nombre de la vista dentro de “return view()”.
Tenemos ya implementado las primeras dos condiciones. Ahora para la tercera condición
necesitamos realizar algunos pasos extras. Relájate son absolutamente pequeños y fáciles pero
con gran resultado final.
Primer paso es agregar una página más “Index.Android.cshtml” especialmente para Android en
la carpeta Vista como se muestra en la siguiente imagen.
El siguiente pasó 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.
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).
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 código
plantilla para OAuth.
Una vez que el proyecto es creado abrir la clase “OAuthConfig.cs” del folder “App_start”.
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”
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”.
Para invocar este formulario necesitamos una acción en el controlador “Customer” porque no
podemos invocar directamente a una 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.
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.
Nota: Note que en la parte superior se asignó la sentencia using que referencia a la clase
extensión creada previamente.