Co, dlaczego i kiedy lepiej wybrać cshtml vs aspx?

108

Chciałbym wiedzieć co, dlaczego lub kiedy lepiej wybrać cshtml i co, dlaczego lub kiedy lepiej wybrać technologie aspx? Do czego służą te dwie technologie?

Dziękuję Ci,

Bastien Vandamme
źródło
Wydaje mi się, że nie widziałem plików cshtml w dowolnym miejscu w witrynie microsoft.com.
user34660
@ user34660 Jak określić, czy jest to cshtml czy aspx? przedłużenie jest ukryte.
Sajuuk

Odpowiedzi:

111

Jak odpowiedzieli inni ludzie .cshtml(lub .vbhtmljeśli to twój gust) zapewnia mapowanie obsługi do załadowania silnika MVC. .aspxPrzedłużenie po prostu ładuje Aspnet_isapi.dll wykonującej kompilacji i serwuje formularzy. Różnica w mapowaniu programu obsługi jest po prostu metodą pozwalającą na współistnienie obu na tym samym serwerze, co pozwala zarówno aplikacjom MVC, jak i aplikacjom WebForms żyć pod wspólnym katalogiem głównym.

Dzięki temu witryna http://www.mydomain.com/MyMVCApplication może być ważna i obsługiwana z regułami MVC wraz z http://www.mydomain.com/MyWebFormsApplication jako standardowy formularz internetowy.

Edycja: jeśli
chodzi o różnice w technologiach, struktura szablonów MVC (Razor) ma na celu zwrócenie stron .Net do bardziej RESTful „internetowej” platformy widoków szablonów oddzielających logikę kodu między modelem (obiekty biznesowe / dane) , widok (co widzi użytkownik) i kontrolery (połączenie między nimi). Model WebForms (aspx) był próbą firmy Microsoft do wykorzystania złożonego osadzania javascript do symulacji bardziej stanowej aplikacji podobnej do aplikacji WinForms wraz ze zdarzeniami i cyklem życia strony, który byłby w stanie zachować własny stan ze strony na stronę.

Wybór jednego lub drugiego zawsze będzie sporny, ponieważ istnieją argumenty za i przeciw obu systemom. Podoba mi się prostota architektury MVC (chociaż routing nie jest prosty) i łatwość składni Razor. Uważam, że architektura WebForms jest po prostu zbyt ciężka, aby być efektywną platformą internetową. Biorąc to pod uwagę, istnieje wiele przypadków, w których struktura WebForms zapewnia bardzo zwięzły i użyteczny model z bogatą strukturą zdarzeń, która jest dobrze zdefiniowana. Wszystko sprowadza się do potrzeb aplikacji i preferencji osób ją budujących.

Joel Etherton
źródło
11
+1, to ważny punkt dotyczący rozróżnienia między celem formularza sieci Web ASP.NET, jakim jest tworzenie stanowego środowiska dla sieci bezstanowej.
smartcaveman
Jedną z głównych zalet aspx w porównaniu z cshtml jest to, że możesz wyświetlać i edytować samą stronę (rodzaj WUSIWYG) za pomocą karty projektu. W przypadku plików cshtml możesz równie dobrze edytować swoją stronę HTML za pomocą notatnika. Pracujesz „w ciemności”.
nivs1978
@ nivs1978: Właściwie uważam, że to jest wada. Zbyt wielu programistów używa tego jako podpórki do pisania niechlujnych znaczników. Ostatecznie projektant jest w stanie pokazać tylko „prawie” wersję strony, ponieważ wyrenderuje widok tylko za pomocą własnej wewnętrznej „przeglądarki”. Chociaż możesz mieć ogólne pojęcie o tym, jak strona będzie wyświetlana, nadal nie możesz tego wiedzieć, dopóki nie zostanie wyrenderowana w prawdziwej przeglądarce.
Joel Etherton,
44

Razor to aparat widoku dla ASP.NET MVC, a także aparat szablonów . Kod Razor i kod wbudowany ASP.NET (kod zmieszany ze znacznikami) są najpierw kompilowane i przekształcane w zestaw tymczasowy przed wykonaniem. Tak więc, podobnie jak C # i VB.NET, kompilują się do IL, co sprawia, że ​​są wymienne, kod Razor i Inline są wymienne.

Dlatego jest to bardziej kwestia stylu i zainteresowania. Bardziej czuję się z maszynką do golenia niż z kodem wbudowanym ASP.NET, co oznacza, że ​​wolę strony Razor (cshtml) od stron .aspx.

Wyobraź sobie, że chcesz dostać Humanklasę i wyrenderować ją. W plikach cshtml piszesz:

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

Podczas gdy w plikach aspx piszesz:

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

Jak widać, @znak brzytwy znacznie ułatwia mieszanie kodu i znaczników.

Saeed Neamati
źródło
6
@ MikaëlMayer, w Razor, Modeljest używany do silnie wpisanych widoków, w których definiujesz swój typ u góry za pomocą modelsłowa kluczowego.
Saeed Neamati
Małe pytanie do Ciebie @SaeedNeamati ... Powiedzmy, że tworzymy aplikację sieci Web, która będzie zużywać złożone webAPI SOAP oparte na mikrousługach ... w tym scenariuszu lepiej jest użyć asp.net mvc aspx lub mvc cshtml . Osobiście uważam, że składnia cshtml jest łatwiejsza.
codemilan
Dobra odpowiedź ... ta odpowiedź jest znacznie prostsza do zrozumienia ..., przynajmniej dla początkujących takich jak ja :)
eRaisedToX
10

Chociaż składnia z pewnością różni się między Razor ( .cshtml/ .vbhtml) i WebForms ( .aspx/ .ascx), (Razor jest bardziej zwięzły i nowoczesny z tych dwóch), nikt nie wspomniał, że chociaż oba mogą być używane jako silniki widoku / szablony, tradycyjne ASP.NET Kontrolki formularzy sieci Web mogą być używane w dowolnych plikach .aspx lub .ascx (nawet w spójności z architekturą MVC).

Jest to istotne w sytuacjach, w których ustalono długotrwałe rozwiązania problemu i spakowano je do podłączanego komponentu (np. Elementu sterującego wysyłaniem dużych plików) i chcesz go użyć w witrynie MVC. Z Razorem nie możesz tego zrobić. Można jednak wykonywać wszystkie te same operacje, które byłyby używane w tradycyjnej architekturze ASP.NET z widokiem formularza sieci Web.

Ponadto widoki formularzy sieci Web ASP.NET mogą mieć pliki związane z kodem, co umożliwia osadzanie logiki w oddzielnym pliku, który jest kompilowany razem z widokiem. Podczas gdy społeczność programistów rośnie, aby postrzegać ściśle powiązane architektury i wzorzec Smart Client jako złą praktykę , był to główny sposób robienia rzeczy i nadal jest bardzo możliwy w przypadku plików .aspx / .ascx. Brzytwa celowo nie ma takiej jakości.

smartcaveman
źródło
Kiedy zacząłem to pisać, Joel nie wprowadził swoich zmian, ale zostawię to na wypadek, gdyby ktoś uznał to za pomocne
smartcaveman
4

Pliki Cshtml są plikami używanymi przez Razor i jak stwierdzono jako odpowiedź na to pytanie , ich główną zaletą jest to, że można je renderować w testach jednostkowych. Różne odpowiedzi na ten inny temat przyniosą wiele innych interesujących punktów.

Timothée Bourguignon
źródło