¿Qué, por qué o cuándo es mejor elegir cshtml vs aspx?

108

Me gustaría saber qué, por qué o cuándo es mejor elegir cshtml y qué, por qué o cuándo es mejor elegir tecnologías aspx. ¿Para qué están destinadas estas dos tecnologías?

Gracias,

Bastien Vandamme
fuente
No creo que haya visto archivos cshtml en ninguna parte del sitio web microsoft.com.
user34660
@ user34660 ¿cómo se determina si es cshtml o aspx? la extensión está oculta.
Sajuuk

Respuestas:

111

Como han respondido otras personas, .cshtml(o .vbhtmlsi ese es su estilo) proporciona un mapeo de manejadores para cargar el motor MVC. La .aspxextensión simplemente carga aspnet_isapi.dll que realiza la compilación y sirve formularios web. La diferencia en el mapeo del controlador es simplemente un método que permite que los dos coexistan en el mismo servidor, lo que permite que tanto las aplicaciones MVC como las aplicaciones WebForms vivan bajo una raíz común.

Esto permite que http://www.mydomain.com/MyMVCApplication sea ​​válido y se sirva con las reglas MVC junto con http://www.mydomain.com/MyWebFormsApplication para ser válido como un formulario web estándar.

Editar:
En cuanto a la diferencia en las tecnologías, el marco de plantillas MVC (Razor) está destinado a devolver las páginas .Net a una plataforma más RESTful "basada en la web" de vistas de plantillas que separan la lógica del código entre el modelo (negocios / objetos de datos) , la vista (lo que ve el usuario) y los controladores (la conexión entre los dos). El modelo WebForms (aspx) fue un intento de Microsoft de utilizar la incrustación de JavaScript compleja para simular una aplicación con más estado similar a una aplicación WinForms completa con eventos y un ciclo de vida de la página que sería capaz de retener su propio estado de una página a otra.

La elección de usar uno u otro siempre será polémica porque hay argumentos a favor y en contra de ambos sistemas. Por mi parte, me gusta la simplicidad en la arquitectura MVC (aunque el enrutamiento es todo menos simple) y la facilidad de la sintaxis de Razor. Siento que la arquitectura de WebForms es demasiado pesada para ser una plataforma web eficaz. Dicho esto, hay muchos casos en los que el marco WebForms proporciona un modelo muy conciso y utilizable con una estructura de eventos rica que está bien definida. Todo se reduce a las necesidades de la aplicación y las preferencias de quienes la construyen.

Joel Etherton
fuente
11
+1, ese es un punto importante sobre la distinción entre el objetivo de ASP.NET Web Form de crear un entorno con estado para la web sin estado.
smartcaveman
Una ventaja importante de aspx en comparación con cshtml es que puede ver y editar la página en sí (tipo WUSIWYG) usando la pestaña de diseño. Con los archivos cshtml, también puede usar el bloc de notas para editar su página html. Estás trabajando "en la oscuridad".
nivs1978
@ nivs1978: De hecho, encuentro que esto es una desventaja. Demasiados desarrolladores usan esto como una muleta para escribir un marcado descuidado. Al final, el diseñador solo es capaz de mostrarle una versión "casi" de la página, ya que solo representará la vista con su propio "navegador" interno. Si bien puede tener una idea general de cómo se mostrará una página, aún no puede saberlo hasta que se procese en un navegador real.
Joel Etherton
44

Razor es un motor de visualización para ASP.NET MVC y también un motor de plantillas . El código Razor y el código en línea ASP.NET (código mezclado con marcado) se compilan primero y se convierten en un ensamblado temporal antes de ejecutarse. Por lo tanto, al igual que C # y VB.NET se compilan en IL, lo que los hace intercambiables, el código Razor e Inline son intercambiables.

Por tanto, es más una cuestión de estilo e interés. Me siento más cómodo con razor que con el código en línea ASP.NET, es decir, prefiero las páginas de Razor (cshtml) a las páginas .aspx.

Imagina que quieres obtener una Humanclase y renderizarla. En los archivos cshtml , escribe:

<div>Name is @Model.Name</div>

Mientras está en archivos aspx , escribe:

<div>Name is <%= Human.Name %></div>

Como puede ver, el @signo de la navaja facilita mucho la mezcla de código y el marcado.

Saeed Neamati
fuente
6
@ MikaëlMayer, en Razor, Modelse usa para vistas fuertemente tipadas, en las que usted define su tipo en la parte superior usando una modelpalabra clave.
Saeed Neamati
Una pequeña pregunta para usted @SaeedNeamati ...... Digamos que estamos construyendo una aplicación web para consumir webAPI SOAP basado en microservicios complejos .... en este escenario, es mejor usar asp.net mvc aspx o mvc cshtml . Personalmente, sentí la sintaxis cshtml más fácil.
codemilan
Buena respuesta ... esta respuesta es mucho más sencilla de entender ..., al menos para principiantes como yo :)
eRaisedToX
10

Si bien la sintaxis es ciertamente diferente entre Razor ( .cshtml/ .vbhtml) y WebForms ( .aspx/ .ascx), (Razor es el más conciso y moderno de los dos), nadie ha mencionado que si bien ambos se pueden usar como View Engines / Templating Engines, ASP.NET tradicional Los controles de Web Forms se pueden utilizar en cualquier archivo .aspx o .ascx (incluso en cohesión con una arquitectura MVC).

Esto es relevante en situaciones en las que se han establecido y empaquetado soluciones de larga data a un problema en un componente conectable (por ejemplo, un control de carga de archivos grandes) y desea usarlo en un sitio MVC. Con Razor, no puedes hacer esto. Sin embargo, puede ejecutar todo el mismo procesamiento de backend que usaría con una arquitectura ASP.NET tradicional con una vista de formulario web.

Además, las vistas de formularios web ASP.NET pueden tener archivos de código subyacente, lo que permite incrustar la lógica en un archivo separado que se compila junto con la vista. Si bien la comunidad de desarrollo de software está creciendo para ver las arquitecturas estrechamente acopladas y el patrón de Smart Client como una mala práctica , solía ser la forma principal de hacer las cosas y todavía es muy posible con archivos .aspx / .ascx. Razor, intencionalmente, no tiene tal cualidad.

inteligentecaveman
fuente
Cuando empecé a escribir esto, Joel no había hecho su edición, pero voy a dejarlo en caso que alguien encuentre útil
smartcaveman
4

Los archivos Cshtml son los que usa Razor y, como se indicó como respuesta a esta pregunta , su principal ventaja es que pueden procesarse dentro de pruebas unitarias. Las diversas respuestas a este otro tema traerán muchos otros puntos interesantes.

Timothée Bourguignon
fuente