Що, чому або коли краще вибрати cshtml vs aspx?


108

Мені хотілося б знати, що, чому або коли краще вибрати cshtml і що, чому або коли краще вибрати технології aspx? Для чого призначені ці дві технології?

Дякую,


Я не думаю, що я бачив файли cshtml де-небудь на веб-сайті microsoft.com.
користувач34660

@ user34660 Як визначити, чи це cshtml чи aspx? розширення приховано.
Саджук

Відповіді:


111

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

Це дозволяє http://www.mydomain.com/MyMVCApplication бути дійсним та подаватися з правилами MVC разом із http://www.mydomain.com/MyWebFormsApplication, щоб бути дійсним як стандартна веб-форма.

Редагувати:
Що стосується різниці в технологіях, рамка шаблонів MVC (Razor) призначена для повернення .Net сторінок на більш РЕСТЕВНУ "веб-платформу" шаблонових поглядів, що розділяє логіку коду між моделлю (бізнес / об'єкти даних) , вид (те, що бачить користувач) та контролери (з'єднання між ними). Модель WebForms (aspx) була спробою Майкрософт використовувати складне вбудовування в JavaScript для імітації більш стаціонарного додатка, схожого на програму WinForms у комплекті з подіями та життєвим циклом сторінки, яка змогла б зберігати власний стан зі сторінки на сторінку.

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


11
+1, це важливий момент щодо розрізнення мети ASP.NET Web Form - створення сприятливого середовища для мережі без громадянства.
smartcaveman

Однією з головних переваг aspx порівняно з cshtml є те, що ви можете переглядати та редагувати саму сторінку (тип WUSIWYG) за допомогою вкладки «Дизайн». За допомогою файлів cshtml ви також можете використовувати блокнот для редагування вашої html-сторінки. Ви працюєте «в темряві».
nivs1978

@ nivs1978: Я насправді вважаю, що це є нижньою стороною. Занадто багато розробників використовують це як милицю для написання неохайної розмітки. Врешті-решт, дизайнер здатний показати вам "майже" версію сторінки, оскільки вона буде надавати перегляд лише власним внутрішнім "браузером". Хоча ви можете отримати загальне уявлення про те, як відображатиметься сторінка, ви все ще не можете знати, поки вона не відображатиметься в справжньому браузері.
Джоель Етертон

44

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

Тому це більше питання стилю та інтересу. Мені більше подобається бритва, а не вбудований код 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ключового слова.
Саїд Неаматі

Невелике запитання для вас @SaeedNeamati ...... Скажімо, ми створюємо веб-додаток для споживання складних мікросервісів на основі SOAP webAPI .... у цьому сценарії, це asp.net mvc aspx або mvc cshtml, краще використовувати . Я особисто відчув синтаксис cshtml легше.
codemilan

Приємна відповідь ... цю відповідь набагато простіше зрозуміти ... принаймні для початківців, як я :)
eRaisedToX

10

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

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

Крім того, представлення веб-форм ASP.NET може мати файли Code-Behind, що дозволяє вбудовувати логіку в окремий файл, який компілюється разом із представленням даних. У той час як спільнота розробки програмного забезпечення зростає, коли архітектури та модель Smart Client є щільно поєднаною як погана практика , це був головним способом виконання дій, і це все ще можливо з файлами .aspx / .ascx. Бритва, навмисно, не має такої якості.


Коли я почав писати це, Джоел не зробив його редагування, але я залишу його на випадок, якщо хтось вважатиме це корисним
smartcaveman

4

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.