Подтвердить что ты не робот

Макет MVC Главная страница MVC MVC

Я начинаю изучать MVC4. Я наткнулся на две возможности создания представления на основе шаблона Razor или главной страницы.

Я хотел бы понять практические различия между ними.

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

С макетами Razor я могу определить только один непрерывный блок страницы, который может быть переопределен конкретным представлением, и я должен использовать несколько макетов (нарушение DRY) для небольших изменений в других частях стр. Правильно ли указано мое предыдущее утверждение или я что-то не хватает?

Очевидно, что я могу отображать содержимое в любой части страницы, используя jQuery, но это другое дело

4b9b3361

Ответ 1

Вы можете использовать разделы с Razor. Скотт Гу написал о них здесь: http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx

В макете вы можете определить столько разделов, сколько пожелаете:

<div id="leftMenu">
    @RenderSection("LeftMenu", required: false)
</div>

который вы можете переопределить в своих представлениях:

@section LeftMenu {
    <div>... here comes the left menu for this view ...</div>
}

Вы также можете проверить, был ли раздел определен в представлении, а если не предоставлять некоторый контент по умолчанию:

@if (IsSectionDefined("LeftMenu")) { 
    @RenderSection("LeftMenu")
}
else { 
    <div>Some default left menu</div>
}

Ответ 2

Начиная с MVC3, был представлен механизм просмотра бритвы. На высоком уровне механизм просмотра - это в основном то, что берет представление и визуализирует необходимый HTML. Razor использует файл _layout и собственную систему шаблонов, которая похожа на мастер-страницы. Однако MVC3 и 4 имеют еще один движок представления, называемый движком просмотра WebForms, и который использует мастер-страницы. Если вы посмотрите старые руководства MVC1 и MVC2, вы увидите мастер-страницы, потому что до MVC3 существовал только механизм просмотра WebForms.

Теперь с точки зрения функциональности оба схожи. Мастер-страницы позволяют определять держатели контента, в то время как бритва позволяет вам определять разделы. Основное различие заключается в том, как страница отображается. Главные страницы отображают страницу за пределами, то есть сначала главную страницу, затем держатели содержимого. Бритва, я считаю, рекурсивной и начинается с самого внутреннего раздела и работает так, как будто это делается.

Ознакомьтесь с этим сообщением в блоге для получения дополнительной информации о макетах бритвы http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx

В терминах одного из них предпочтение отдается обоим механизмам просмотра, но если вы хотите развить бритвенный ситакс (который я настоятельно рекомендую), вам нужно использовать систему макета. Razor не позволяет использовать мастер-страницы.