Чтение онлайн

ЖАНРЫ

Язык программирования C#9 и платформа .NET5
Шрифт:

<th>

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

</th>

<th></th>

</tr>

</thead>

В последнем разделе производится проход по записям и их отображение с использованием вспомогательной функции HTML по имени

DisplayFor
. Эта вспомогательная функция HTML ищет шаблон отображения с именем, соответствующим типу свойства, и если шаблон не обнаруживается, то разметка создается стандартным образом. Для каждого свойства объекта также выполняется поиск шаблона отображения, который
применяется при его наличии. Например, если
Car
имеет свойство
DateTime
, то для него будет использоваться показанный ранее в главе шаблон
DisplayTemplate
.

В следующем блоке также задействованы специальные вспомогательные функции дескрипторов

item-edit
,
item-details
и
item-delete
, которые были добавлены ранее. Обратите внимание, что при передаче значений открытому свойству специальной вспомогательной функции имя свойства указывается с применением "шашлычного" стиля в нижнем регистре и добавляется к дескриптору в виде атрибута:

<tbody>

@foreach (var item in Model)

{

<tr>

@if (showMake)

{

<td>

@Html.DisplayFor(modelItem => item.MakeNavigation.Name)

</td>

}

<td>

@Html.DisplayFor(modelItem => item.Color)

</td>

<td>

@Html.DisplayFor(modelItem => item.PetName)

</td>

<td>

<item-edit item-id="@item.Id"></item-edit> |

<item-details item-id="@item.Id"></item-details> |

<item-delete item-id="@item.Id"></item-delete>

</td>

</tr>

}

</tbody>

</table>

Представление Index

При наличии частичного представления

_CarListPartial
представление
Index
будет небольшим. Создайте в каталоге
Views\Cars
новый файл представления по имени
Index.cshtml
. Удалите весь сгенерированный код и добавьте следующую разметку:

@model IEnumerable<Car>

@{

ViewData["Title"] = "Index";

}

<h1>Vehicle Inventory</h1>

<partial name="Partials/_CarListPartial" model="@Model"/>

Частичное представление

_CarListPartial
вызывается со значением модели содержащего представления (
IEnumerable<Car>
), которое передается с помощью атрибута
model
. В итоге модель частичного представления устанавливается в объект, переданный вспомогательной функции дескриптора
<partial>
.

Чтобы взглянуть на представление

Index
, модифицируйте метод
Index
класса
CarsController
, как показано ниже:

[Route("/[controller]")]

[Route("/[controller]/[action]")]

public IActionResult Index

=> View(_repo.GetAllIgnoreQueryFilters);

Запустив

приложение и перейдя по ссылке
https://localhost:5001/Cars/Index
, вы увидите список автомобилей (рис. 31.4).

В правой части списка отображаются специальные вспомогательные функции дескрипторов.

Представление ВуMake

Представление

ВуMake
похоже на
Index
, но настраивает частичное представление так, что информация о производителе отображается только в заголовке страницы. Создайте в каталоге
Views\Cars
новый файл представления по имени
ВуMake.cshtml
. Удалите весь сгенерированный код и добавьте следующую разметку:

@model IEnumerable<Car>

@{

ViewData["Title"] = "Index";

}

<h1>Vehicle Inventory for @ViewBag.MakeName</h1>

@{

var mode = new ViewDataDictionary(ViewData) {{"ByMake", true}};

}

<partial name="Partials/_CarListPartial" model="Model" view-data="@mode"/>

Отличия заметить легко. Здесь создается экземпляр

ViewDataDictionary
, содержащий свойство
ByMake
из
ViewBag
, который затем вместе с моделью передается частичному представлению, что позволяет скрыть информацию о производителе. Метод действия для этого представления должен получить все автомобили с указанным значением
MakeId
и установить
ViewBag
в
MakeName
с целью отображения в пользовательском интерфейсе. Оба значения берутся из маршрута. Добавьте в класс
CarsController
новый метод действия по имени
ByMake
:

[HttpGet("/[controller]/[action]/{makeId}/{makeName}")]

public IActionResult ByMake(int makeId, string makeName)

{

ViewBag.MakeName = makeName;

return View(_repo.GetAllBy(makeId));

}

Запустив приложение и перейдя по ссылке

https://localhost:5001/Cars/l/VW
, вы увидите список, показанный на рис. 31.5.

Представление Details

Создайте в каталоге

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

@model Car

@{

ViewData["Title"] = "Details";

}

<h1>Details for @Model.PetName</h1>

@Html.DisplayForModel

Поделиться с друзьями: