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

@model Car

@{

  ViewData["Title"] = "Details";

}

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

@Html.DisplayForModel()

<div>

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

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

  <item-list></item-list>

</div>

Вспомогательная функция

@Html.DisplayForModel()
использует созданный ранее шаблон отображения (
Car.cshtml
) для вывода детальной информации об автомобиле.

Прежде чем обновлять метод действия

Details()
, добавьте вспомогательный метод по имени
GetOne()
, который будет извлекать одиночную запись
Car
:

internal Car GetOneCar(int? id) => !id.HasValue ? null : _repo.Find(id.Value);

Модифицируйте метод действия

Details()
следующим образом:

[HttpGet("{id?}")]

public IActionResult Details(int? id)

{

  if (!id.HasValue)

  {

    return BadRequest();

  }

  var car = GetOneCar(id);

  if (car == null)

  {

    return NotFound();

  }

  return View(car);

}

Маршрут для метода действия

Details()
содержит необязательный параметр маршрута
id
с идентификатором автомобиля, значение которого присваивается параметру
id
метода. Обратите внимание, что у параметра маршрута есть вопросительный знак с маркером. Это указывает на необязательность параметра, почти как вопросительный знак в типе
int?
делает переменную
int
допускающей значение
null
. Если параметр не был предоставлен или оболочка службы не может отыскать автомобиль с идентификатором, заданным в параметре маршрута, тогда метод возвращает ошибку
NotFound
. В противном случае метод отправляет найденную запись
Car
представлению
Details
. Запустив приложение и перейдя по ссылке
<a href="https://localhost:5001/Cars/Details/1">https://localhost:5001/Cars/Details/1</a>
, вы увидите экран, показанный на рис. 31.6.

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

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

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

Create
было начато ранее. Вот его полная разметка:

@model Car

@{

    ViewData[&quot;Title&quot;] = &quot;Create&quot;;

}

&lt;h1&gt;Create a New Car&lt;/h1&gt;

&lt;hr/&gt;

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

  &lt;div class=&quot;col-md-4&quot;&gt;

    &lt;form asp-controller=&quot;Cars&quot; asp-action=&quot;Create&quot;&gt;

      &lt;div asp-validation-summary=&quot;ModelOnly&quot; class=&quot;text-danger&quot;&gt;&lt;/div&gt;

<b>      @Html.EditorForModel()</b>

      &lt;div class=&quot;form-group&quot;&gt;

        &lt;button type=&quot;submit&quot;

          class=&quot;btn btn-success&quot;&gt;Create &lt;i class=&quot;fas fa-
plus&quot;&gt;&lt;/i&gt;

        &lt;/button&gt;&nbsp;&nbsp;|&nbsp;&nbsp;

        &lt;item-list&gt;&lt;/item-list&gt;

      &lt;/div&gt;

    &lt;/form&gt;

  &lt;/div&gt;

&lt;/div&gt;

<b>@section Scripts {</b>

<b>    &lt;partial name=&quot;_ValidationScriptsPartial&quot; /&gt;</b>

<b>}</b>

Вспомогательная функция

@Html.EditorForModel()
использует созданный ранее шаблон отображения (
Car.cshtml
) для отображения редактора сведений об автомобиле.

В разделе

Scripts
представления указано частичное представление
_ValidationScriptsPartial
. Вспомните, что в компоновке этот раздел встречается после загрузки jQuery. Шаблон разделов помогает гарантировать загрузку надлежащих зависимостей до загрузки самого содержимого.

Методы действий Create()

В рамках процесса создания применяются два метода действий: первый (

HttpGet
) возвращает пустое представление для ввода новой записи, а второй (
HttpPut
) отправляет значения новой записи.

Вспомогательный метод GetMakes()

Вспомогательный метод

GetMakes()
возвращает список записей 
Make
в виде экземпляра
SelectList
и принимает в качестве параметра экземпляр реализации
IMakeRepo
:

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