Cosa, perché o quando è meglio scegliere cshtml vs aspx?


108

Vorrei sapere cosa, perché o quando è meglio scegliere cshtml e cosa, perché o quando è meglio scegliere le tecnologie aspx? A cosa sono destinate queste due tecnologie?

Grazie,


Non credo di aver visto file cshtml da nessuna parte nel sito Web microsoft.com.
user34660

@ user34660 come si determina se si tratta di cshtml o aspx? l'estensione è nascosta.
Sajuuk

Risposte:


111

Come altre persone hanno risposto, .cshtml(o .vbhtmlse questo è il tuo gusto) fornisce una mappatura del gestore per caricare il motore MVC. L' .aspxestensione carica semplicemente aspnet_isapi.dll che esegue la compilazione e fornisce moduli web. La differenza nella mappatura del gestore è semplicemente un metodo per consentire ai due di coesistere sullo stesso server consentendo sia alle applicazioni MVC che alle applicazioni WebForms di vivere sotto una radice comune.

Ciò consente a http://www.mydomain.com/MyMVCApplication di essere valido e servito con le regole MVC insieme a http://www.mydomain.com/MyWebFormsApplication di essere valido come modulo web standard.

Modifica:
per quanto riguarda la differenza nelle tecnologie, il framework di modelli MVC (Razor) ha lo scopo di restituire le pagine .Net a una piattaforma più RESTful "basata sul web" di viste basate su modelli che separano la logica del codice tra il modello (oggetti aziendali / dati) , la vista (ciò che vede l'utente) e i controller (la connessione tra i due). Il modello WebForms (aspx) è stato un tentativo da parte di Microsoft di utilizzare un complesso incorporamento di javascript per simulare un'applicazione più stateful simile a un'applicazione WinForms completa di eventi e un ciclo di vita della pagina che sarebbe in grado di mantenere il proprio stato da una pagina all'altra.

La scelta di utilizzare l'uno o l'altro sarà sempre controversa perché ci sono argomenti a favore e contro entrambi i sistemi. Mi piace la semplicità dell'architettura MVC (sebbene il routing sia tutt'altro che semplice) e la facilità della sintassi Razor. Penso che l'architettura di WebForms sia troppo pesante per essere una piattaforma web efficace. Detto questo, ci sono molti casi in cui il framework WebForms fornisce un modello molto succinto e utilizzabile con una ricca struttura di eventi ben definita. Tutto si riduce alle esigenze dell'applicazione e alle preferenze di chi la costruisce.


11
+1, Questo è un punto importante sulla distinzione tra l'obiettivo di ASP.NET Web Form di creare un ambiente con stato per il Web senza stato.
smartcaveman

Uno dei principali vantaggi di aspx rispetto a cshtml è che puoi visualizzare e modificare la pagina stessa (tipo WUSIWYG) utilizzando la scheda di progettazione. Con i file cshtml potresti anche usare il blocco note per modificare la tua pagina html. Stai lavorando "al buio".
nivs1978

@ nivs1978: in realtà trovo che questo sia un aspetto negativo. Troppi sviluppatori lo usano come stampella per scrivere un markup sciatto. Alla fine, il designer è solo in grado di mostrarti una versione "quasi" della pagina poiché renderà la vista solo con il suo "browser" interno. Sebbene tu possa avere un'idea generale di come verrà visualizzata una pagina, non puoi ancora saperlo finché non viene visualizzata in un vero browser.
Joel Etherton

44

Razor è un motore di visualizzazione per ASP.NET MVC e anche un motore di modelli . Il codice Razor e il codice inline ASP.NET (codice misto a markup) vengono entrambi compilati per primi e trasformati in un assembly temporaneo prima di essere eseguiti. Pertanto, proprio come C # e VB.NET compilano entrambi in IL, il che li rende intercambiabili, il codice Razor e Inline sono entrambi intercambiabili.

Pertanto, è più una questione di stile e interesse. Sono più a mio agio con il razor, piuttosto che con il codice inline ASP.NET, cioè preferisco le pagine Razor (cshtml) alle pagine .aspx.

Immagina di voler ottenere una Humanclasse e renderla. Nei file cshtml scrivi:

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

Mentre nei file aspx scrivi:

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

Come puoi vedere, il @segno del rasoio rende molto più facile mescolare codice e markup.


6
@ MikaëlMayer, in Razor, Modelè usato per visualizzazioni fortemente tipizzate, in cui definisci il tuo tipo in alto usando la modelparola chiave.
Saeed Neamati

Una piccola domanda per te @SaeedNeamati ...... Supponiamo che stiamo costruendo un'applicazione web per consumare webAPI SOAP basata su micro-servizi complessi .... in questo scenario, è meglio usare asp.net mvc aspx o mvc cshtml . Personalmente ho ritenuto più semplice la sintassi di cshtml.
codemilan

Bella risposta ... questa risposta è molto più semplice da capire ..., almeno per i principianti come me :)
eRaisedToX

10

Mentre la sintassi è certamente diversa tra Razor ( .cshtml/ .vbhtml) e WebForms ( .aspx/ .ascx), (Razor è il più conciso e moderno dei due), nessuno ha menzionato che mentre entrambi possono essere utilizzati come motori di visualizzazione / motori di modellazione, ASP.NET tradizionale I controlli Web Form possono essere utilizzati su qualsiasi file .aspx o .ascx, (anche in coesione con un'architettura MVC).

Ciò è rilevante nelle situazioni in cui sono state stabilite soluzioni di lunga data a un problema e impacchettate in un componente collegabile (ad esempio un controllo di caricamento di file di grandi dimensioni) e si desidera utilizzarlo in un sito MVC. Con Razor, non puoi farlo. Tuttavia, è possibile eseguire tutte le stesse elaborazioni back-end che useresti con un'architettura ASP.NET tradizionale con una visualizzazione Web Form.

Inoltre, le visualizzazioni dei moduli Web ASP.NET possono avere file Code-Behind, che consentono di incorporare la logica in un file separato che viene compilato insieme alla visualizzazione. Mentre la comunità di sviluppo software sta crescendo fino a vedere le architetture strettamente collegate e il modello Smart Client come una cattiva pratica , era il modo principale di fare le cose ed è ancora molto possibile con i file .aspx / .ascx. Il rasoio, intenzionalmente, non ha tale qualità.


Quando ho iniziato a scriverlo, Joel non aveva apportato la sua modifica, ma lo lascio nel caso qualcuno lo trovi utile
smartcaveman

4

I file cshtml sono quelli usati da Razor e come indicato come risposta a questa domanda , il loro vantaggio principale è che possono essere renderizzati all'interno di unit test. Le varie risposte a questo altro argomento porteranno molti altri punti interessanti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.