You are on page 1of 13

INGENIERA DE SISTEMAS

PROYECTOS 1

RAZOR ENGINE VS WEB FORMS

PRESENTADO POR:
MARA JOS CHVEZ ESTRADA

DOCENTE:
ING. SAMUEL MESTANZA ALCNTARA

Cajamarca, Abril Del 2012

Razor Enginee vs Web Forms

RAZOR ENGINE vs WEB FORMS


Mara Jos Chvez Estrada e-mail: sweet2812@hotmail.com 702693@comunidad.upn.edu.pe

RESUMEN: En este documento se hablar acerca de


RAZOR el cual est diseado para ser un motor de vista alternativo para ASP.NET MVC. Inicialmente introducido en WebMatrix y ahora incluido como parte de ASP.NET MVC 3, asimismo RAZOR permite a los desarrolladores reemplazar el anticuado <%%> de sintaxis con un modelo de codificacin mucho ms limpio que se detalla a continuacin, sobre todo alrededor del smbolo @ sin perder las caractersticas de HTML. Como nuevo tecnologa viene cargada de mejoras sobre tecnologas antecesoras como las WEB FORMS, trayendo consigo ventajas y desventajas que se explicaran a detalle.

publicacin: Programacin de Aplicaciones en

Smalltalk-80: Controlador.

Como

utilizar

Modelo

Vista

La implementacin de Microsoft ASP.NET MVC proporciona una alternativa al modelo de formularios Web Forms de ASP.NET para crear aplicaciones web. ASP.NET MVC es un marco de presentacin de poca complejidad y fcil de testear que, como las aplicaciones basadas en formularios Web Forms, se integra con caractersticas de ASP.NET como son las pginas maestras y la autenticacin basada en pertenencias

PALABRAS CLAVE: WEB, RAZOR, Web Forms, MVC, Compacto, expresivo y fluido.

1 INTRODUCCIN: ASP.NET MVC 3


ASP.NET MVC 3 es un marco de trabajo para la construccin de aplicaciones escalables basadas en estndares web utilizando patrones de diseo bien establecidos y el poder del Framework de ASP.NET. ASP.NET MVC 3 se basa en ASP.NET MVC 1 y 2, es la adicin de grandes caractersticas que simplifican el cdigo. El modelo de arquitectura Model-View-Controller (MVC) separa una aplicacin en tres componentes principales: el modelo, la vista y el controlador. Fue descrito por primera vez en 1979 por Trygve Reenskaug, de los laboratorios de Xerox, en la 1

Figura 1: Modelo Vista Controlador Desde su primera versin ASP.NET MVC ha tenido el concepto de motor de vistas (View Engine). Recapitulando: en ASP.NET MVC las vistas realizan tareas slo de presentacin, no contienen ningn tipo de lgica de negocio y no

Razor Enginee vs Web Forms

. acceden a datos. Bsicamente se limitan a mostrar datos y a solicitar datos nuevos al usuario. Si vienes del mundo de webforms, olvdate del concepto de Web Controls: no existen en ASP.NET MVC. No existe el drag and drop, no se configura propiedades. Las vistas son bsicamente HTML. Y lo que no es HTML son pequeas porciones de cdigo de servidor destinadas a terminar generando HTML para mostrar Como vimos anteriormente ASP.NET MVC siempre ha apoyado el concepto de "motores de El equipo que desarroll ASP.NET MVC tuvo la idea de permitir separar la sintaxis de servidor usada del framework de ASP.NET MVC. El resultado? Lo que llamamos un motor de vistas de ASP.NET MVC. En las versiones 1 y 2, el framework viene con un nico motor de vistas, el llamado motor ASPX, que usa los clsicos archivos .aspx como vistas de ASP.NET MVC. Pero ojo! aunque estemos utilizando archivos .aspx, no son webforms (los Inicialmente introducido en WebMatrix y ahora incluye como parte de ASP.NET MVC 3, Razor permite a los desarrolladores reemplazar el anticuado <%%> de sintaxis con un modelo de codificacin mucho ms limpio, sobre todo alrededor del smbolo @. Adems, ofrece algunas caractersticas excelentes para los escenarios de la pgina maestra, al mismo tiempo sin perder el acceso a las caractersticas con las que ya se est familiarizado como los mtodos de ayuda HTML. Con el objetivo principal de aliviar el dolor en la Rpidamente empezaron a surgir motores de vistas alternativos, realizados por la comunidad, con la intencin de tener sintaxis ms claras para nuestras vistas. Algunos ejemplos son Nhaml y Spark. 2 autora de la vista, el motor de vista Razor ha estado atacando a las siguientes caractersticas: El nuevo motor de vista RAZOR se ha optimizado en torno a la generacin de cdigo HTML diseado para ser un motor de vista alternativo para ASP.NET MVC. vista" - que son los mdulos conectables que implementan las diferentes opciones de sintaxis de la plantilla. informacin. Finalmente la versin 3 de ASP.NET MVC vino acompaada de un nuevo motor de vistas, llamado Razor. Eso s, el motor ASPX puede seguir siendo usado en ASP.NET MVC3, pero honestamente no hay ninguna razn para hacerlo (salvo en casos de migraciones, por supuesto): Razor es ms claro, sencillo e intuitivo.

2 RAZOR: A NEW VIEW ENGINE

webcontrols no funcionan, no tenemos viewstate ni el ciclo de vida de webforms y adems es que son vistas de MVC, por lo que slo deben hacer tareas de presentacin). La sintaxis que usa el motor
ASPX es un poco extensa, es decir que se debe escribir mucho para ciertas tareas: Existe una gran cantidad de veces que debe usarse el tag <% y su parejo %> para indicar dnde empieza y termina el cdigo de servidor.

Razor Enginee vs Web Forms

. Ms compacto y ms fcil de usar. Razor tiene como objetivo reducir al mnimo el nmero de caracteres y las pulsaciones de teclas necesarias para escribir un archivo de vista, en apoyo de un flujo de trabajo rpido y fluido de codificacin. A diferencia de otras sintaxis de plantilla existente, los desarrolladores no tienen que interrumpir su codificacin para indicar de forma explcita los bloques de servidores dentro del HTML. El parser de Razor es lo suficientemente listo como para inferirlo del cdigo. Esto nos permite una sintaxis ms compacta y expresiva convirtindola en limpia, rpida y divertida de escribir. Fcil de aprender: Razor es fcil de aprender de forma rpida y productiva con un mnimo de conceptos. Basado en conocimientos de HTML. No es un nuevo lenguaje: Conscientemente se decidi no crear un nuevo lenguaje imperativo con razor. En su lugar hemos querido permitir a los desarrolladores a utilizar su actual C # / VB (u otro) y entregar una sintaxis de formato de plantilla que permite un impresionante flujo de trabajo y la construccin de HTML con el idioma de su eleccin. Funciona con cualquier editor de texto: Razor no requiere una herramienta especfica y le permite ser productivo en cualquier editor de texto simple y llano (en el bock de notas funciona muy bien). Figura 2: Add view: Razor Eleccin y Flexibilidad: Esta versin de ASP.NET MVC incluye un nuevo "Add-> View" de dilogo que hace que sea fcil elegir la sintaxis que se desea utilizar al crear un archivo de vista la nueva plantilla. Se le permitir seleccionar fcilmente cualquiera de los motores de visualizacin disponibles que ha instalado en su mquina - que le da la opcin de utilizar cualquier mtodo vista que sea ms natural para usted. Pruebas Unitarias: Razor soporta las pruebas unitarias sin necesidad de un controlador o un servidor web, y se puede alojar en cualquier proyecto de pruebas unitarias. Tiene una gran Intellisense: Razor ha sido diseado para no requerir un instrumento o un editor de cdigo, que contar con el apoyo de la finalizacin de instrucciones dentro de Visual Studio.

Razor Enginee vs Web Forms

3 RAZOR: Sintaxis
Lo que ms salta a la vista de Razor es que, a diferencia del motor ASPX donde tenemos el tag que inicia el cdigo de servidor y el que lo termina, slo hay tag para iniciar cdigo de servidor. El motor Razor es lo suficientemente inteligente para saber cundo termina el cdigo de servidor, sin necesidad de que lo explicitemos.

Razor tan limpio y productivo en escenarios en los que es necesaria la creacin de HTML. El uso de la @ funciona de dos maneras bsicas: @expresin: Renderiza la expresin en el navegador. As @item.Nombre muestra el valor de tem.Nombre. Es decir @expresin equivale a <%: expresin %> @{cdigo}: Permite ejecutar un cdigo que no genera salida HTML. Es decir @{cdigo} equivale a <% Cdigo %> NOTITA:

Veamos la misma vista de antes, pero ahora usando Razor:

Como hemos visto el motor Razor interpreta cuando empieza y cuando termina el cdigo de servidor. Pero no siempre lo consigue adecuadamente. Por ejemplo: @{ int a = 10; int b = 3; } El valor de 10 - 3 es: @a-b Genera el siguiente HTML: El valor de 10 - 3 es: 10-b

Las diferencias saltan a la vista, no? En Razor el smbolo de la arroba (@) marca el inicio de cdigo de servidor. Y como comentaba antes, no hay smbolo para indicar que se termina el cdigo de servidor: el motor Razor deduce cuando termina en base al contexto. Una de las tcnicas que usa Razor para identificar implicitamente cundo termina un bloque de cdigo es buscar un tag que denote el principio de una regin contenedora. Esta tcnica particular usando tags para definir bloques con cdigo es uno de los principales ingredientes que hace a

Recordad la clave: el motor Razor espera una y slo una expresin detrs de la @. Por eso debemos usar los parntesis. El valor de 10 - 3 es: @(a-b)

Mltiples lneas de contenido Razor hace fcil poder tener varias lneas de contenido en un mismo elemento HTML. Por ejemplo, en el siguiente ejemplo el contenido del @if est dentro de un elemento <p> de HTML lo que hace que Razor lo trate como contenido:

Razor Enginee vs Web Forms

4 RAZOR: NUEVOS HELPERS


Razor tambin incluye nuevos ayudantes HTML, tales como las siguientes: En escenarios en los que necesitamos varias lneas de contenido que no estn dentro de un elemento HTML, podemos usar varias veces los caractres @: Grfico: Representa un grfico, que ofrece las mismas caractersticas que el control de grfico de ASP.NET 4. WebGrid: Representa una cuadrcula de datos, con la paginacin y la funcionalidad de la clasificacin. Crypto: Utiliza algoritmos de hash para crear contraseas adecuadamente salados y hash. Adems, tambin podramos usar un elemento <text> para identificar explcitamente el contenido a Razor: WebImage: Representa una imagen. WebMail: Enva un mensaje de correo electrnico.

5 RAZOR: MEJORAS
Soporte para mltiples motores de vista El Vista Agregar cuadro de dilogo en ASP.NET MVC 3 le permite elegir el motor de la vista que desea trabajar, y el nuevo proyecto de cuadro de dilogo le permite especificar el motor de la vista por defecto para un proyecto. Usted puede elegir el motor de formularios Web Forms vista (ASPX), maquinilla de afeitar, o un motor de la vista de

El cdigo anterior renderizar la misma salida que la versin anterior con @:. Razor omitir automticamente el tag <text> de la salida y renderizar el contenido. Comentarios Para comentarios Razor ASP.NET, iniciar el comentario con @ * y terminan con * @. El comentario puede estar en una lnea o varias lneas

cdigo abierto como el Spark , NHaml o NDjango . Mejoras del controlador: Filtros de Accin Global A veces se desea realizar la lgica, ya sea antes se ejecuta un mtodo de accin o despus de una accin se ejecuta el mtodo. Para apoyar esto, ASP.NET MVC 2, siempre y filtros de accin. Filtros de accin son atributos personalizados que proporcionan un medio para aadir declarativa de pre-accin y el comportamiento posterior a la

Razor Enginee vs Web Forms

. accin a determinados mtodos de accin del controlador. MVC 3 le permite especificar filtros globales mediante la adicin de ellos a la GlobalFilters coleccin. Nueva propiedad "ViewBag" MVC 2 controladores son compatibles con un ViewData que le permite pasar los datos a una plantilla de vista usando una API en tiempo de ejecucin. En MVC 3, tambin puede utilizar la sintaxis un poco ms sencilla con la propiedad Los nuevos "tipos de ActionResult" Los siguientes ActionResult tipos y mtodos de ayuda correspondientes son nuevas o mejoradas de MVC 3:

HttpNotFoundResult. Devuelve un cdigo


de estado HTTP 404 para el cliente.

RedirectResult. Devuelve una redireccin


temporal (HTTP 302 cdigo de estado) o una redireccin permanente (HTTP 301 cdigo de estado), en funcin de un parmetro booleano.

ViewBag para lograr el mismo propsito. Por


ejemplo, en lugar de escribir ViewData ["mensaje"]

HttpStatusCodeResult.
estado HTTP.

Devuelve

un

cdigo especificado por el usuario de

= "text", se puede escribir ViewBag.Message = "text" . No es necesario para definir las clases
inflexible de tipos para utilizar el ViewBag. Debido a que es una propiedad dinmica, usted puede en lugar de simplemente obtener o establecer las propiedades y las resolver de forma dinmica en tiempo de ejecucin.

Las mejoras de JavaScript y Ajax De forma predeterminada, el Ajax y los ayudantes de validacin de MVC 3 utiliza un enfoque discreto JavaScript. JavaScript discreto evita la inyeccin JavaScript en el HTML en lnea. Esto hace que el cdigo HTML ms pequeo y menos atestado y hace ms fcil que cambiar o personalizar las bibliotecas de JavaScript. Mejoras en el rutado URL Se han introducido varias mejoras en el sistema de rutado de urls. El rutado url es uno de los componentes fundamentales de un framework web MVC. Algunas de las mejoras del motor URL son:

Helper methods MapRoute() y IgnoreRoute(), con


estos mtodos podremos registrar de una forma ms sencilla reglas de rutado. MapRoute() nos permite una forma sencilla de aadir nuevas reglas MVC Route a la coleccin de rutas. IgnoreRoute() nos permite eliminar patrones de URL de esa Figura 3: ViewBag misma coleccin.

Razor Enginee vs Web Forms

6 WEB

FORMS

ASP.NET

MVC:

Las pginas web que incluyen contenido de Razor tienen una extensin de archivo especial (.cshtml o .vbhtml). El servidor reconoce estas extensiones, ejecuta el cdigo que est marcado con sintaxis de Razor y, a continuacin, enva la pgina resultante al explorador.

Funcionamiento
ASP.NET Web Pages con sintaxis de Razor proporciona una sintaxis de programacin simple para escribir cdigo en pginas web donde el cdigo basado en servidor se incrusta en el formato HTML de las pginas web. El cdigo de Razor se ejecuta en el servidor antes de que la pgina se enve al explorador. Este cdigo de servidor puede crear dinmicamente contenido de cliente, es decir, puede generar formato HTML u otro contenido sobre la marcha y, a continuacin, enviarlo al explorador junto con cualquier cdigo HTML esttico que contenga la pgina. Web Pages con sintaxis de Razor proporciona una alternativa a formularios Web Forms de ASP.NET. Las pginas de formularios Web Forms se centran en controles de servidor web que generan cdigo HTML automticamente y emulan el modelo de programacin basado en eventos usado para aplicaciones cliente. En cambio, las pginas de Razor funcionan ms directamente como pginas HTML estndar, donde el propio usuario puede crear virtualmente todo el formato HTML y, a continuacin, agregar la funcionalidad alrededor de ese formato usando el cdigo del servidor. En general, las pginas de Razor son ms ligeras que las pginas de los formularios Web Forms. Por esa razn y porque la sintaxis es simple, Razor puede ser ms fcil de aprender para los programadores y ms rpido para desarrollar pginas web dinmicas.

7 ASP.NET
Comparacin

MVC

vs

WEB

FORMS:

ASP.NET simplifica diversas tareas diarias y, lo que es ms importante, habilitados a los programadores trabajan en un nivel mayor de abstraccin. Esto permite puedan centrarse ms en las funciones principales de la aplicacin Web que en las tareas comunes alrededor de diseo de la pgina Web. Basada en controles de servidor, ASP.NET permite a los programadores generar sitios Web y aplicaciones con conocimientos HTML y JavaScript mnima de mundo real. El modelo de ASP.NET se denomina formularios Web Forms y claramente se inspir por el modelo escritorio de Windows Forms (en vez profundamente inspirado por la filosofa de desarrollo rpido de aplicaciones Visual Basic). Por lo tanto, por qu Microsoft versin "otro" marco ASP.NET, denominado ASP.NET MVC? Ahora que Asp.Net es mucho ms corriente en el trabajo, se hace la pregunta una y otra vez en cuanto a cul debe ser utilizado durante el desarrollo de una aplicacin Web?, Veamos los pros y contras de formularios Web Forms de ASP.NET y ASP.NET MVC. Veamos el anlisis FODA para cada uno:

Razor Enginee vs Web Forms

Asp.Net MVC FODA Fortalezas Proporciona un control preciso sobre HTML representado. Limpiador HTML generado. La separacin entre la interfaz de usuario superior y el cdigo. Es ms fcil de realizar pruebas unitarias. Puede soportar mltiples motores de vista. El tamao tpico de la pgina es pequea. Fcil integracin con frameworks como jQuery. Debilidades No es dirigida por eventos. No ViewState. Requiere familiarizarse con el patrn MVC.

Oportunidades Permite Test Driven Development (TDD) que est construido con TDD, por lo que es mucho ms fcil escribir casos de prueba de unidad y para interceptar el flujo del programa. Permite modelos la reutilizacin para de los mismos diferentes presentar

interfaces de usuario. Amenazas Mayor aceleracin y el tiempo para de los formacin requerido

desarrolladores con experiencia limitada o inexistente en el desarrollo de aplicaciones web.

Razor Enginee vs Web Forms

Asp.Net WebForms FODA Fortalezas Proporciona capacidades buenos para el desarrollo. Gran compatibilidad con el diseador en Visual Studio. La facilidad de desarrollo para aplicaciones empresariales de datos pesados. Muy ricas bibliotecas de control y apoyo de proveedores de terceros. Un familiar modelo orientado a eventos, en comparacin con el tan desarrollo fcil para de los Windows Forms, y RAD muy

Ms difcil de probar la unidad, tan difcil de utilizar TDD. Pginas pesadas debido a la gestin del estado de la vista.

Oportunidades Genial en la creacin de prototipos rpidos para aplicaciones de negocios. Esto es muy til cuando se trata de mostrar una prueba rpida de los conceptos a los clientes. Amenazas Ms difcil de adoptar vistas de interfaz de usuario, a pesar de los distintos pginas marcos disponibles (las principales, temas, etc.)

desarrolladores para recoger. Debilidades Lgica de interfaz de usuario, junto con el cdigo, y por lo tanto es difcil de separar.

Razor Enginee vs Web Forms

Consideraciones Finales: Formularios Web Forms ASP.NET y ASP.NET MVC no son competidores en el sentido de que se debe para reemplazar la otra. Tendr que elegir uno, pero diferentes aplicaciones pueden forzar realizar distintas opciones. Formularios Web Forms es difcil probar. ASP.NET MVC requiere administrar la generacin de HTML en un nivel ms detallado. Figura 4: WebForms vs MVC Con todo, ASP.NET Web Forms y ASP.NET MVC son funcionalmente equivalentes en el sentido de que un equipo cualificado puede correctamente utilizar cualquiera para crear cualquier solucin Web. Generalizando, debera decir que formularios Web Forms abarca la filosofa de RAD (Rapid Aplication Development), mientras que ASP.NET MVC est orientada a TDD (Test Driven Development). En los formularios Web Forms, simplemente no tiene la flexibilidad de ASP.NET MVC. Esto es una limitacin es true. ASP.NET MVC est diseado con capacidad de prueba. ASP.NET MVC no es la nica manera para obtener SoC en ASP.NET. Formularios ViewState deshabilitar. ASP.NET MVC expone arquitectura Web. ASP.NET MVC se dise con capacidad de prueba y la insercin de dependencia en la cuenta. ASP.NET MVC le hacia un mejor diseo del cdigo. ASP.NET MVC es joven y carece de un modelo de componente. Web se Forms puede permite controlar ir o aprendiendo a medida.

8 CONCLUSIONES
Hemos visto la sintaxis bsica del motor de vistas Razor, y las principales consideraciones que debemos tener presentes. Entonces "Razor" proporciona una nueva y gran visin de motor opcin que es ms sencillo para el cdigo centrado en plantillas. Es un flujo de trabajo de 10

Razor Enginee vs Web Forms

. codificacin que es rpido, expresivo y divertido. Su sintaxis es compacto y reduce la escritura, mientras que al mismo tiempo, la mejora de la legibilidad del conjunto de su marcado y el cdigo. Tambin hemos visto que hay ventajas y desventajas en formularios Web Forms y ASP.NET MVC. Sin embargo, muchos desarrolladores, parecen favorecer [2] Desarrollo en Modelo Vista Controlador en C# con ASP.NET MVC3 Ultima actualizacin: Agosto 2011 n-modelo-vista-controlador-en-c-con-aspnet Es esencial entender las diferencias mvc3 [3] Tutorial: Crear un sitio web con sintaxis de Razor en Visual Studio http://msdn.microsoft.com/eses/library/gg606533.aspx [4] Microsoft WebMatrix: Crear web con estructurales entre los marcos de modo que puede tomar una decisin correcta. Con todo, ASP.NET MVC calificado son Web Forms y ASP.NET equipo funcionalmente puede para utilizar crear ASP.NET RAZOR Ultima actualizacin: Nov 30, 2010 Hay dos consideraciones importantes para elegir entre los dos: [5] Experience ASP.NET MVC 3 Beta the Razor rosoft-WebMatrix-Crear-web-con-ASPNET-RAZOR ASP.NET MVC porque representa la nica forma de obtener SoC y capacidad de prueba en sus aplicaciones. ASP.NET MVC intentar encontrar primero una vista .aspx y si no la encuentra buscar una vista Razor (.cshtml ).

9 REFERENCIAS
[1] ASP.NET Web Pages - Adding Razor Code http://www.w3schools.com/aspnet/webpages_ra zor.asp

equivalentes en el sentido de que un correctamente cualquiera

cualquier solucin Web.

Test Driven Development: La vida


sera mucho ms fcil de utilizar MVC.

View Engine Ultima actualizacion : Diciembre 2011 http://danhartshorn.com/2011/12/experience-aspnet-mvc-3-beta-the-razor-view-engine/ [6] Razor vs Webforms view engine Ultima actualizacion: Marzo 2011 http://stackoverflow.com/questions/5261124/razorvs-webforms-view-engine-for-new-asp-net-mvc-3site

Data Driven Aplication: la vida


sera mucho ms fcil utilizando WebForms si la aplicacin es de datos pesados.

Para finalizar una cosilla: Ambos motores de vistas (ASPX y Razor) se pueden usar en MVC3 de forma simultnea. El motor de 11

Razor Enginee vs Web Forms

. [7] Experience ASP.NET MVC 3 Beta - the Razor View Engine Ultima actualizacion: Noviembre del 2010 http://dotnetslackers.com/articles/aspnet/Experienc e-ASP-NET-MVC-3-Beta-the-Razor-ViewEngine.aspx#s19-create-custom-helper-method [14] ASP.NET MVC 3 [8] Introduction to ASP.NET Web Programming Using the Razor Syntax Ultima actualizacion : Junio del 2010 http://www.asp.net/web-pages/tutorials/basics/2introduction-to-asp-net-web-programming-usingthe-razor-syntax [9] El motor de vistas Razor Ultima actualizacin: Mayo del 2011 http://www.desarrolloweb.com/articulos/motorvistas-razor-dotnet.html [10] Razor View Engine para ASP.NET MVC 3 Ultima actualizacion : Febrero 2011 http://www.returngis.net/2011/02/razor-viewengine-para-asp-net-mvc/ [11] ASP.NET MVC 3: Sintaxis de Razor @: y el tag text Ultima actualizacin: Enero 2011 http://speakingin.net/2011/01/30/asp-net-mvc-3sintaxis-de-razor-y/ [12] Webforms y ASP.NET MVC juntos? Pues claro! Ultima actualizacin: Mayo 2011 http://geeks.ms/blogs/etomas/archive/2011/05/13/1 91-webforms-y-asp-net-mvc-juntos-puesclaro.aspx [16] Choosing Between WebForms and MVC http://blog.gadodia.net/choosing-betweenwebforms-and-mvc/ [15] MVC 3 con Razor ~ Usando JQuery y Unobtrusive AJAX Ultima actualizacin : Febrero 2011 http://cells.puertadeenlace.net/post/6-MVC-3-conRazor-7e-Usando-JQuery-y-UnobtrusiveAJAX.aspx http://www.asp.net/mvc/mvc3#BM_TheRazorViewE ngine [13] Introducing Razor a new view engine for ASP.NET Ultima actualizacion : Julio del 2010 http://weblogs.asp.net/scottgu/archive/2010/07/02/i ntroducing-razor.aspx

12

You might also like