Что, почему или когда лучше выбирать cshtml vs aspx?

108

Я хотел бы знать, что, почему и когда лучше выбирать cshtml, а что, почему или когда лучше выбирать технологии aspx? Для чего предназначены эти две технологии?

Спасибо,

Бастьен Вандамм
источник
Я не думаю, что видел файлы cshtml где-либо на сайте microsoft.com.
user34660
@ user34660 как определить, cshtml или aspx? расширение скрыто.
Sajuuk

Ответы:

111

Как ответили другие люди .cshtml(или, .vbhtmlесли это ваш вкус), предоставляет отображение обработчика для загрузки механизма MVC. .aspxРасширение просто загружает Aspnet_isapi.dll , который выполняет компиляцию и обслуживает до веб - форм. Разница в сопоставлении обработчиков - это просто метод, позволяющий им сосуществовать на одном сервере, позволяя приложениям MVC и приложениям WebForms жить под общим корнем.

Это позволяет http://www.mydomain.com/MyMVCApplication быть действительным и обслуживаться с правилами MVC вместе с http://www.mydomain.com/MyWebFormsApplication, чтобы быть действительным как стандартная веб-форма.

Изменить:
Что касается разницы в технологиях, шаблонная структура MVC (Razor) предназначена для возврата страниц .Net на более RESTful «веб-платформу шаблонных представлений, разделяющих логику кода между моделью (бизнес-объекты / объекты данных). , представление (то, что видит пользователь) и контроллеры (связь между ними). Модель WebForms (aspx) была попыткой Microsoft использовать сложное встраивание javascript для имитации приложения с отслеживанием состояния, похожего на приложение WinForms, в комплекте с событиями и жизненным циклом страницы, которые могли бы сохранять свое состояние от страницы к странице.

Выбор того или иного варианта всегда будет спорным, потому что есть аргументы за и против обеих систем. Мне, например, нравится простота архитектуры MVC (хотя маршрутизация совсем не проста) и простота синтаксиса Razor. Я считаю, что архитектура WebForms слишком тяжелая, чтобы быть эффективной веб-платформой. При этом существует множество случаев, когда фреймворк WebForms предоставляет очень сжатую и удобную модель с богатой четко определенной структурой событий. Все сводится к потребностям приложения и предпочтениям его разработчиков.

Джоэл Этертон
источник
11
+1, Это важный момент в различии между целью веб-формы ASP.NET по созданию среды с отслеживанием состояния для Интернета без состояния.
smartcaveman 06
Одним из основных преимуществ aspx по сравнению с cshtml является то, что вы можете просматривать и редактировать саму страницу (типа WUSIWYG), используя вкладку дизайна. С файлами cshtml вы также можете использовать блокнот для редактирования своей html-страницы. Вы работаете «в темноте».
nivs1978
@ nivs1978: На самом деле я считаю, что это недостаток. Слишком многие разработчики используют это как опору для написания небрежной разметки. В конце концов, дизайнер может показать вам только «почти» версию страницы, поскольку он будет отображать представление только в своем собственном внутреннем «браузере». Хотя вы можете получить общее представление о том, как будет отображаться страница, вы все равно не сможете этого сделать, пока она не отобразится в настоящем браузере.
Джоэл Этертон
44

Razor - это механизм просмотра для ASP.NET MVC, а также механизм шаблонов . Код Razor и встроенный код ASP.NET (код, смешанный с разметкой) сначала компилируются, а перед выполнением превращаются во временную сборку. Таким образом, так же, как C # и VB.NET оба компилируются в IL, что делает их взаимозаменяемыми, коды Razor и Inline взаимозаменяемы.

Поэтому это скорее вопрос стиля и интереса. Мне удобнее пользоваться razor, чем встроенным кодом ASP.NET, то есть я предпочитаю страницы Razor (cshtml) страницам .aspx.

Представьте, что вы хотите получить Humanкласс и отрендерить его. В файлах cshtml вы пишете:

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

В файлах aspx вы пишете:

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

Как видите, @знак бритвы значительно упрощает смешивание кода и разметки.

Саид Нямати
источник
6
@ MikaëlMayer в Razor Modelиспользуется для строго типизированных представлений, в которых вы определяете свой тип вверху с помощью modelключевого слова.
Saeed Neamati 04
Небольшой вопрос к вам @SaeedNeamati ...... Допустим, мы создаем веб-приложение для использования сложных микросервисов на основе SOAP webAPI .... в этом сценарии лучше использовать asp.net mvc aspx или mvc cshtml . Я лично почувствовал, что синтаксис cshtml проще.
codemilan 05
Хороший ответ ... этот ответ намного проще понять ... по крайней мере, для таких новичков, как я :)
eRaisedToX
10

Хотя синтаксис, безусловно, отличается между Razor ( .cshtml/ .vbhtml) и WebForms ( .aspx/ .ascx) (Razor является более кратким и современным из двух), никто не упомянул, что, хотя оба могут использоваться в качестве механизмов просмотра / шаблонов, традиционный ASP.NET Элементы управления веб-форм могут использоваться в любых файлах .aspx или .ascx (даже в сочетании с архитектурой MVC).

Это актуально в ситуациях, когда давно существующие решения проблемы были созданы и упакованы в подключаемый компонент (например, элемент управления загрузкой больших файлов), и вы хотите использовать его на сайте MVC. С Razor этого не сделать. Однако вы можете выполнять ту же внутреннюю обработку, что и в традиционной архитектуре ASP.NET с представлением веб-формы.

Кроме того, представления веб-форм ASP.NET могут иметь файлы скрытого кода, что позволяет встраивать логику в отдельный файл, который компилируется вместе с представлением. В то время как сообщество разработчиков программного обеспечения растет и считает тесно связанные архитектуры и шаблон Smart Client плохой практикой , раньше это было основным способом решения задач и все еще очень возможно с файлами .aspx / .ascx. Бритва намеренно не имеет такого качества.

умный пещерный человек
источник
Когда я начал писать это, Джоэл еще не редактировал, но я оставлю его на случай, если кто-то сочтет это полезным
smartcaveman
4

Файлы Cshtml используются Razor, и, как указано в ответе на этот вопрос , их главное преимущество заключается в том, что они могут отображаться внутри модульных тестов. Различные ответы на эту другую тему принесут много других интересных моментов.

Тимоти Бургиньон
источник