O quê, por que ou quando é melhor escolher cshtml vs aspx?

108

Gostaria de saber o que, por que ou quando é melhor escolher cshtml e o quê, por que ou quando é melhor escolher tecnologias aspx? A que se destinam essas duas tecnologias?

Obrigado,

Bastien Vandamme
fonte
Eu não acho que tenha visto arquivos cshtml em qualquer lugar do site microsoft.com.
user34660
@ user34660 como você determina se é cshtml ou aspx? a extensão está oculta.
Sajuuk

Respostas:

111

Como outras pessoas responderam, .cshtml(ou .vbhtmlse esse for o seu sabor) fornece um mapeamento de manipulador para carregar o mecanismo MVC. A .aspxextensão simplesmente carrega o aspnet_isapi.dll que executa a compilação e fornece formulários da web. A diferença no mapeamento do manipulador é simplesmente um método de permitir que os dois coexistam no mesmo servidor, permitindo que os aplicativos MVC e os aplicativos WebForms vivam em uma raiz comum.

Isso permite que http://www.mydomain.com/MyMVCApplication seja válido e servido com regras MVC junto com http://www.mydomain.com/MyWebFormsApplication para ser válido como um formulário da web padrão.

Edit:
Quanto à diferença nas tecnologias, o framework de templates MVC (Razor) se destina a retornar as páginas .Net a uma plataforma "baseada na web" mais RESTful de visualizações modeladas que separam a lógica do código entre o modelo (objetos de negócios / dados) , a visão (o que o usuário vê) e os controladores (a conexão entre os dois). O modelo WebForms (aspx) foi uma tentativa da Microsoft de usar a incorporação complexa de javascript para simular um aplicativo com mais estado semelhante a um aplicativo WinForms completo com eventos e um ciclo de vida de página que seria capaz de manter seu próprio estado de página para página.

A escolha de usar um ou outro sempre será controversa porque há argumentos a favor e contra os dois sistemas. Eu, pelo menos, gosto da simplicidade da arquitetura MVC (embora o roteamento seja tudo menos simples) e da facilidade da sintaxe do Razor. Eu sinto que a arquitetura WebForms é muito pesada para ser uma plataforma web eficaz. Dito isso, há várias instâncias em que a estrutura de WebForms fornece um modelo muito sucinto e utilizável com uma rica estrutura de eventos bem definida. Tudo se resume às necessidades do aplicativo e às preferências de quem o está construindo.

Joel Etherton
fonte
11
+1, esse é um ponto importante sobre a distinção entre o objetivo do ASP.NET Web Form de criar um ambiente com estado para a web sem estado.
smartcaveman
Uma grande vantagem do aspx em comparação com o cshtml é que você pode visualizar e editar a própria página (tipo WUSIWYG) usando a guia de design. Com arquivos cshtml, você também pode usar o bloco de notas para editar sua página html. Você está trabalhando "no escuro".
nivs1978
@ nivs1978: Na verdade, acho que isso é uma desvantagem. Muitos desenvolvedores usam isso como uma muleta para escrever marcações desleixadas. No final, o designer só é capaz de mostrar a você uma versão "quase" da página, já que só renderizará a visualização com seu próprio "navegador" interno. Embora você possa ter uma noção geral de como uma página será exibida, você ainda não pode saber até que seja renderizada em um navegador verdadeiro.
Joel Etherton
44

Razor é um mecanismo de visualização para ASP.NET MVC e também um mecanismo de template . O código Razor e o código embutido ASP.NET (código misturado com marcação) são compilados primeiro e transformados em um assembly temporário antes de serem executados. Assim, assim como C # e VB.NET compilam para IL, o que os torna intercambiáveis, o código Razor e Inline são intercambiáveis.

Portanto, é mais uma questão de estilo e interesse. Estou mais confortável com o razor, em vez do código embutido ASP.NET, ou seja, prefiro as páginas do Razor (cshtml) às páginas .aspx.

Imagine que você deseja obter uma Humanclasse e renderizá-la. Em arquivos cshtml você escreve:

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

Enquanto estiver nos arquivos aspx, você escreve:

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

Como você pode ver, o @sign of razor torna a mistura de código e marcação muito mais fácil.

Saeed Neamati
fonte
6
@ MikaëlMayer, no Razor, Modelé usado para visualizações fortemente tipadas, nas quais você define seu tipo no topo usando uma modelpalavra-chave.
Saeed Neamati
Uma pequena pergunta para você @SaeedNeamati ...... Digamos que estejamos construindo um aplicativo da web para consumir webAPI SOAP baseado em microsserviços complexos .... neste cenário, é melhor usar asp.net mvc aspx ou mvc cshtml . Pessoalmente, achei a sintaxe cshtml mais fácil.
codemilan
Boa resposta ... esta resposta é muito mais simples de entender ..., pelo menos para iniciantes como eu :)
eRaisedToX
10

Embora a sintaxe seja certamente diferente entre Razor ( .cshtml/ .vbhtml) e WebForms ( .aspx/ .ascx), (Razor sendo o mais conciso e moderno dos dois), ninguém mencionou que, embora ambos possam ser usados ​​como View Engines / Templating Engines, ASP.NET tradicional Os controles de formulários da Web podem ser usados ​​em qualquer arquivo .aspx ou .ascx (mesmo em coesão com uma arquitetura MVC).

Isso é relevante em situações onde soluções de longa data para um problema foram estabelecidas e empacotadas em um componente conectável (por exemplo, um controle de upload de arquivo grande) e você deseja usá-lo em um site MVC. Com Razor, você não pode fazer isso. No entanto, você pode executar todo o mesmo processamento de back-end que usaria com uma arquitetura ASP.NET tradicional com uma exibição de formulário da Web.

Além disso, as visualizações de formulários da Web do ASP.NET podem ter arquivos Code-Behind, o que permite embutir a lógica em um arquivo separado que é compilado junto com a visualização. Embora a comunidade de desenvolvimento de software esteja crescendo para ver as arquiteturas fortemente acopladas e o padrão Smart Client como uma prática ruim , costumava ser a principal maneira de fazer as coisas e ainda é muito possível com arquivos .aspx / .ascx. Razor, intencionalmente, não tem essa qualidade.

smartcaveman
fonte
Quando comecei a escrever isso, Joel não tinha feito sua edição, mas vou deixá-la no caso de alguém achar útil
smartcaveman
4

Os arquivos Cshtml são os usados ​​pelo Razor e conforme declarado como resposta a esta questão , sua principal vantagem é que eles podem ser renderizados dentro de testes de unidade. As várias respostas a este outro tópico trarão muitos outros pontos interessantes.

Timothée Bourguignon
fonte