Литмир - Электронная Библиотека
A
A

@using AutoLot.Mvc

@using AutoLot.Mvc.Models

<b>@using AutoLot.Models.Entities </b>

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

Строка

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

На заметку! А для чего служит ведущий символ подчеркивания в

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

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

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

Каталог Shared

Внутри каталога

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

Каталог DisplayTemplates

В каталоге

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

Шаблон отображения DateTime

Создайте внутри каталога

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

@model DateTime?

@if (Model == null)

{

  @:Unknown

}

else

{

  if (ViewData.ModelMetadata.IsNullableValueType)

  {

    @:@(Model.Value.ToString(&quot;d&quot;))

  }

  else

  {

    @:@(((DateTime)Model).ToString(&quot;d&quot;))

  }

}

Обратите внимание, что в директиве

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

Шаблон отображения Car

Создайте внутри каталога

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

@model AutoLot.Models.Entities.Car

&lt;dl class=&quot;row&quot;&gt;

  &lt;dt class=&quot;col-sm-2&quot;&gt;

    @Html.DisplayNameFor(model =&gt; model.MakeId)

  &lt;/dt&gt;

  &lt;dd class=&quot;col-sm-10&quot;&gt;

    @Html.DisplayFor(model =&gt; model.MakeNavigation.Name)

  &lt;/dd&gt;

  &lt;dt class=&quot;col-sm-2&quot;&gt;

    @Html.DisplayNameFor(model =&gt; model.Color)

  &lt;/dt&gt;

  &lt;dd class=&quot;col-sm-10&quot;&gt;

    @Html.DisplayFor(model =&gt; model.Color)

  &lt;/dd&gt;

  &lt;dt class=&quot;col-sm-2&quot;&gt;

    @Html.DisplayNameFor(model =&gt; model.PetName)

  &lt;/dt&gt;

  &lt;dd class=&quot;col-sm-10&quot;&gt;

612
{"b":"847442","o":1}