@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.
Представление Create
Представление
Create
было начато ранее. Вот его полная разметка:
@model Car
@{
ViewData["Title"] = "Create";
}
<h1>Create a New Car</h1>
<hr/>
<div class="row">
<div class="col-md-4">
<form asp-controller="Cars" asp-action="Create">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<b> @Html.EditorForModel()</b>
<div class="form-group">
<button type="submit"
class="btn btn-success">Create <i class="fas fa-
plus"></i>
</button> |
<item-list></item-list>
</div>
</form>
</div>
</div>
<b>@section Scripts {</b>
<b> <partial name="_ValidationScriptsPartial" /></b>
<b>}</b>
Вспомогательная функция
@Html.EditorForModel()
использует созданный ранее шаблон отображения (
Car.cshtml
) для отображения редактора сведений об автомобиле.
В разделе
Scripts
представления указано частичное представление
_ValidationScriptsPartial
. Вспомните, что в компоновке этот раздел встречается
после загрузки jQuery. Шаблон разделов помогает гарантировать загрузку надлежащих зависимостей до загрузки самого содержимого.
Методы действий Create()
В рамках процесса создания применяются два метода действий: первый (
HttpGet
) возвращает пустое представление для ввода новой записи, а второй (
HttpPut
) отправляет значения новой записи.
Вспомогательный метод GetMakes()
Вспомогательный метод
GetMakes()
возвращает список записей
Make
в виде экземпляра
SelectList
и принимает в качестве параметра экземпляр реализации
IMakeRepo
: