Строка @addTegHelper
будет раскрыта вместе со вспомогательными функциями дескрипторов.
На заметку! А для чего служит ведущий символ подчеркивания в _ViewStart.html
, _ViewImports.cshtml
и _Layout.cshtml
? Механизм визуализации Razor изначально создавался для платформы WebMatrix, где не разрешалось напрямую визуализировать файлы, имена которых начинались с символа подчеркивания. Все ключевые файлы (вроде компоновки и конфигурации) имеют имена, начинающиеся с символа подчеркивания. Это не соглашение MVC, поскольку здесь отсутствует проблема, которая была в WebMatrix, но наследие символа подчеркивания продолжает существовать.
Как упоминалось ранее, каждый контроллер получает собственный каталог внутри каталога Views, в котором хранятся его специфичные представления. Имя такого каталога совпадает с именем контроллера (без суффикса Controller
). Скажем, в каталоге Views\Cars
содержатся все представления для CarsController
. Представления обычно именуются согласно методам действий, которые их визуализируют, хотя их имена можно изменять, как уже было показано.
Внутри каталога Views
есть специальный каталог по имени Shared
, в котором хранятся представления, доступные всем контроллерам и действиям. Как уже упоминалось, если запрошенный файл представления не удалось найти в каталоге, специфичном для контроллера, тогда поиск производится в каталоге Shared
.
В каталоге DisplayTemplates
хранятся специальные шаблоны, которые управляют визуализацией типов, а также содействуют многократному использованию кода и согласованности отображения. Когда вызываются методы DisplayFor/DisplayForModel
, механизм визуализации Razor ищет шаблон, имя которого совпадает с именем визуализируемого типа, например, Car.cshtml
для класса Car
. Если специальный шаблон найти не удалось, тогда разметка визуализируется с применением рефлексии. Поиск начинается с каталога Views\{CurrentControllerName}\DisplayTemplates
и в случае неудачи продолжается в каталоге Views\Shared\DisplayTemplates
. Методы DisplayFor/DisplayForModel
принимают необязательный параметр, указывающий имя шаблона.
Создайте внутри каталога 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
типа или саму модель.
Создайте внутри каталога 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)