Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
@Html.DisplayFor(model => model.PetName)
</dd>
</dl>
Вспомогательная функция HTML под названием DisplayNameFor() отображает имя свойства, если только свойство не декорировано или атрибутом Display(Name=""), или атрибутом DisplayName(""), и тогда применяется отображаемое значение. Метод DisplayFor() отображает значение для свойства модели, указанное в выражении. Обратите внимание, что для получения названия производителя используется навигационное свойство MakeNavigation.
Запустив приложение и перейдя на страницу RazorSyntax, вы можете быть удивлены тем, что шаблон отображения Car не применяется. Причина в том, что шаблон находится в каталоге представления Cars, а метод действия RazorSyntax и представление вызываются из HomeController. Методы действий в HomeController будут осуществлять поиск представлений в каталогах Home и Shared и потому не найдут шаблон отображения Car.
Если вы переместите файл Car.cshtml в каталог SharedDisplayTemplates, тогда представление RazorSyntax будет использовать шаблон отображения Car.
Шаблон отображения CarWithColor
Шаблон CarWithColor похож на шаблон Car. Разница в том, что этот шаблон изменяет цвет текста Color (Цвет) на основе значения свойства Color модели. Добавьте в каталог CarsDisplayTemplates новый шаблон по имени CarWithColors.cshtml и приведите разметку к следующему виду:
@model Car
<hr />
<div>
<dl class="row">
<dt class="col-sm-2">
@Html.DisplayNameFor(model => model.PetName)
</dt>
<dd class="col-sm-10">
@Html.DisplayFor(model => model.PetName)
</dd>
(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})<dt class="col-sm-2">
@Html.DisplayNameFor(model => model.MakeNavigation)
</dt>
<dd class="col-sm-10">
@Html.DisplayFor(model => model.MakeNavigation.Name)
</dd>
(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})<dt class="col-sm-2">
@Html.DisplayNameFor(model => model.Color)
</dt>
<dd class="col-sm-10" style="color:@Model.Color">
@Html.DisplayFor(model => model.Color)
</dd>
(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})</dl>
</div>
Чтобы применить шаблон CarWithColors.cshtml вместо Car.cshtml, вызовите DisplayForModel() с именем шаблона (обратите внимание, что правила местоположения по-прежнему актуальны):
@Html.DisplayForModel(<b>"CarWithColors"</b>)
Каталог EditorTemplates
Каталог EditorTemplates работает аналогично каталогу DisplayTemplates, но находящиеся в нем шаблоны используются для редактирования.
Шаблон редактирования Car
Создайте внутри каталога ViewsCars новый каталог под названием EditorTemplates и добавьте в него новое представление по имени Car.cshtml. Удалите сгенерированный код вместе с комментариями и замените его показанным ниже кодом, который является разметкой для редактирования сущности Car:
@model Car
<div asp-validation-summary="All" class="text-danger"></div>
<div class="form-group">
<label asp-for="PetName" class="col-form-label"></label>
<input asp-for="PetName" class="form-control" />
<span asp-validation-for="PetName" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="MakeId" class="col-form-label"></label>
<select asp-for="MakeId" class="form-control" asp-items="ViewBag.MakeId">
</select>
</div>
<div class="form-group">
<label asp-for="Color" class="col-form-label"></label>
<input asp-for="Color" class="form-control"/>