Marc Rubiño

ASP.NET, C#, AJAX.NET, JavaScript, etc.

November 2011 - Artículos

Vistas & View Engines en ASP.NET MVC

Partiendo de que la intención de MVC es separar las responsabilidades de cada componente, me gustaría explicar cual es la responsabilidad de las vistas y como utilizarlas en ASP.NET MVC.

Lo que primero nos choca a los programadores que procedemos de los formularios web, es que han desaparecido los eventos y el famoso ciclo de vida, y eso se debe precisamente que ASP.NET MVC es mucho más natural en los protocolos HTTP y HTML en su tratamiento.

Mvc vs WebForms

Como se puede apreciar en la imagen los formularios web se basaban en los eventos para procesar una petición, entrar en el ciclo de vida del documento, tratar el evento, pintar los controles y devolver el resultado.

Sin embargo las peticiones en MVC son mucho mas simples y respetuosas con el protocolo HTTP. La petición la recibe el motor de rutas que mediante la URL decide cual es el controlador que la debe procesar, el Controlador puede consultar al modelo si es necesario y posteriormente devuelve un ActionResult que puede ser un fichero, datos en formato JSon, una vista, etc.

Vistas

Como ya he comentado la vista encapsula la lógica de presentación y NO tiene que contener lógica de la aplicación ni código de recuperación de datos.

Las vistas no son ficheros físicos ligados a una URL como en los formularios web. Cuando queríamos consultar un formulario teníamos que poner su ruta física www.miaplicacion/personas.aspx En MVC es el controlador el que decide que vista servir y eso facilita que las url sean descriptivas y que los buscadores puedan indexar mejor las páginas de nuestra aplicación “SEO Friendly“.

ViewBag:

Las vistas pueden recibir datos desde el controlador gracias al ViewBag que devuelve un diccionario de datos dinámicos. La gran diferencia con ViewData de las versiones anteriores de MVC, es que ViewBag aprovecha la opción de c#4 para generar tipos dinámicamente y evita tener que hacer conversiones en la vista para obtener el tipo adecuado de los datos.

En el Controlador: Definimos la propiedad que queremos pasar a la vista y el dato

1 ViewBag.Message = "Welcome to ASP.NET MVC!";

 

En la vista: desde la vista recuperamos el dato de una forma muy fácil.

1 <h2>@ViewBag.Message</h2>

 

ViewData vs ViewBag: la gran diferencia es que ya no tenemos la necesidad de hacer conversiones de los datos para poder tratarlos correctamente

1 @*Tipo Fecha con tipos dinámicos*@
2 <h1>@ViewBag.FechaVieBag.ToShortDateString()</h1>
3
4
5 @*Tipo Fecha con ViewData*@
6 <h1>@(((DateTime)ViewData["Fecha"]).ToShortDateString())</h1>
7

 

Tipos de Vistas de las que disponemos:

  •   View Page: Vista principal.
  • LayoutView: Pagina Maestra.
  • ViewContentPage: Vista que utiliza una página Maestra predefinida.
  • Partial View: Vista que se utiliza desde otra vista y no se puede llamar directamente. Como se utilizaban los user controls en los webForms. La vista parcial tiene acceso a su ViewData y al dela vista primaria, pero las actualizaciones de los datos de la vista parcial solo afectan a su viewData y no a la de la vista primaria.

View Engines

ASP.NET MVC utiliza view engines para generar las vistas y desde MVC3 disponemos de dos motores de vistas incluidos para utilizar directamente.

  • ASPX: Es el motor de vistas de ASP.NET con tipos personalizados “ViewPage, ViewMasterPage y ViewUserControl” que heredan de los tipos de páginas existentes .aspx, .ascx, .master.
  • Razor: Motor de vistas más cercano para los programadores de C# o VB
  • Otros:

Convenciones

Hay un par de convenciones que nos afectan al trabajar con las vistas y nos ahorran interminables ficheros de configuración.

  • Return View(): no tenemos que especificar explícitamente que vista estamos devolviendo, porque si no lo hacemos utilizará el nombre de la acción para encontrar la vista. Este ejemplo retorna la vista Create.
1 // GET: /Peliculas/Create
2 public ActionResult Create()
3 {
4 return View();
5 }

 

  • Estructura Vista – controlador: Los controladores se tendrán que llamar MyNombreController y las vistas estarán en una carpeta llamada MyNombre dentro de la carpeta Views. De esta manera el controlador encontrará la vista sin problemas.

En esta imagen las extensiones de los ficheros son .cshtml porque he utilizado el motor de vista Razor en C#, si utilizara VB seria .vbhtml y si utilizara el motor de vista ASPX sería (.aspx, .ascx, .Master)

Creo que con esto hemos visto todo lo que tiene que ver con las vistas en MVC 3

Cross-Posting: http://mrubino.net

 

 

Posted: 29/11/2011 12:52 por Marc Rubiño | con no comments
Archivado en:
[webCast] Auges MVC 3 + Html5 + CSS3

Os recuerdo que este lunes grabaremos el webCast sobre MVC 3 y Html5 con Visual Studio 2010 con la gente de Auges el grupo de usuarios de ASp.Net Spain.

Después de participar en el Barcelona Developer Conference tengo la oportunidad de repetir evento pero esta ves online y con la posibilidad de hacerla completa y sin las restricciones de tiempo que mormalmente nos encontramos en los eventos presenciales.

Podéis acceder al registro en https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032500294&Culture=es-ES

Ademas recordaros que el Martes desde SecondNug tenéis otro webCast de Lluis Franco MVP de Visual C# sobre Mejorar el rendimiento con programación paralela.

Espero Veros a Todos ;-)

Cross-Posting: http://mrubino.net

 

Posted: 24/11/2011 23:52 por Marc Rubiño | con no comments
Archivado en:
Material BcnDevConf MVC + HTML

Esta semana se ha realizado el primer Barcelona Developer Conference 2011 y espero que no sea la última porque nos ha dejado a todos un gran sabor de boca y una innumerable lista de nuevos contactos.

Tenéis disponible el material y la presentación para que podáis jugar un poco con el ejemplo, ya que no tuvimos mucho tiempo para verlo todo.

Proyecto de Ejemplo : Folder

Para los que os supo a poco y tenga ganas de ver la charla completa seguro que no tendremos problemas de tiempo en el webCast que haremos el próximo lunes 28 en el grupo de usuarios de ASP.NET Spain

Nos vemos el Lunes

Cross-Posting:  http://mrubino.net

 

 

 

Posted: 21/11/2011 21:10 por Marc Rubiño | con 2 comment(s)
Archivado en: ,
[Evento] BDNDevConf: MVC + JQuery + Html5

 

Me encuentro en el CommunityDay 2011 de Fuengirola y desconecto un segundo de tanto networking, charlas y el hack-a-ton, para recordar que esta semana tendremos el evento Barcelona Developers Conference '11. Tres intensos días con 18 Master Sessions, 32 Sesiones, 2 Mesas redondas, 3 WorkShops entre otras cosas. Una oportunidad impresionante para coincidir todo tipo de profesionales del sector y ampliar nuestra red de contactos.

Ademas no desaprovechar la oportunidad para hacer un poco de autobombo y recordaros que el viernes 18 yo mismo daré una sesión sobre MVC, JQuery y HTML5.

Para más información podéis consultar la agenda en

http://bcndevcon.org/en/content/scheduling 

Espero que podáis venir al evento.

Cross-posting: http://mrubino.net/