Читаем Язык программирования C#9 и платформа .NET5 полностью

Строка @addTegHelper будет раскрыта вместе со вспомогательными функциями дескрипторов.

На заметку! А для чего служит ведущий символ подчеркивания в _ViewStart.html, _ViewImports.cshtml и _Layout.cshtml? Механизм визуализации Razor изначально создавался для платформы WebMatrix, где не разрешалось напрямую визуализировать файлы, имена которых начинались с символа подчеркивания. Все ключевые файлы (вроде компоновки и конфигурации) имеют имена, начинающиеся с символа подчеркивания. Это не соглашение MVC, поскольку здесь отсутствует проблема, которая была в WebMatrix, но наследие символа подчеркивания продолжает существовать.

Как упоминалось ранее, каждый контроллер получает собственный каталог внутри каталога Views, в котором хранятся его специфичные представления. Имя такого каталога совпадает с именем контроллера (без суффикса Controller). Скажем, в каталоге Views\Cars содержатся все представления для CarsController. Представления обычно именуются согласно методам действий, которые их визуализируют, хотя их имена можно изменять, как уже было показано.

<p id="AutBody_Root1443"><strong>Каталог Shared</strong></p>

Внутри каталога Views есть специальный каталог по имени Shared, в котором хранятся представления, доступные всем контроллерам и действиям. Как уже упоминалось, если запрошенный файл представления не удалось найти в каталоге, специфичном для контроллера, тогда поиск производится в каталоге Shared.

<p id="AutBody_Root1444"><strong>Каталог DisplayTemplates</strong></p>

В каталоге DisplayTemplates хранятся специальные шаблоны, которые управляют визуализацией типов, а также содействуют многократному использованию кода и согласованности отображения. Когда вызываются методы DisplayFor/DisplayForModel, механизм визуализации Razor ищет шаблон, имя которого совпадает с именем визуализируемого типа, например, Car.cshtml для класса Car. Если специальный шаблон найти не удалось, тогда разметка визуализируется с применением рефлексии. Поиск начинается с каталога Views\{CurrentControllerName}\DisplayTemplates и в случае неудачи продолжается в каталоге Views\Shared\DisplayTemplates. Методы DisplayFor/DisplayForModel принимают необязательный параметр, указывающий имя шаблона.

<p id="AutBody_Root1445"><strong>Шаблон отображения DateTime</strong></p>

Создайте внутри каталога Views\Shared новый каталог под названием DisplayTemplates и добавьте в него новое представление по имени DateTime.cshtml. Удалите сгенерированный код вместе с комментариями и замените его следующим кодом:

@model DateTime?

@if (Model == null)

{

  @:Unknown

}

else

{

  if (ViewData.ModelMetadata.IsNullableValueType)

  {

    @:@(Model.Value.ToString("d"))

  }

  else

  {

    @:@(((DateTime)Model).ToString("d"))

  }

}

Обратите внимание, что в директиве @model, строго типизирующей представление, используется буква m нижнего регистра. При ссылке на присвоенное значение модели в Razor применяется буква М верхнего регистра. В этом примере определение модели допускает значения null. Если переданное представлению значение для модели равно null, то шаблон отображает слово Unknown (неизвестно). В противном случае шаблон отображает дату в сокращенном формате, используя свойство Value допускающего null типа или саму модель.

<p id="AutBody_Root1446"><strong>Шаблон отображения Car</strong></p>

Создайте внутри каталога Views новый каталог по имени Cars, а внутри него — каталог под названием DisplayTemplates. Добавьте в каталог DisplayTemplates новое представление по имени Car.cshtml. Удалите сгенерированный код вместе с комментариями и замените его показанным ниже кодом, который отображает сущность Car:

@model AutoLot.Models.Entities.Car

 

    @Html.DisplayNameFor(model => model.MakeId)

 

 

    @Html.DisplayFor(model => model.MakeNavigation.Name)

 

 

    @Html.DisplayNameFor(model => model.Color)

 

 

    @Html.DisplayFor(model => model.Color)

 

 

    @Html.DisplayNameFor(model => model.PetName)

 

 

    @Html.DisplayFor(model => model.PetName)

 

Перейти на страницу:

Похожие книги

97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Билл де Ора , Майкл Хайгард , Нил Форд

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT

Все жанры