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

Изменить размер шрифта:

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

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

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

Метод действия Edit() для GET

Метод действия

Edit()
для
GET
получает одиночную запись
Car
с идентификатором
Id
через оболочку службы и отправляет ее представлению
Edit
:

[HttpGet("{id?}")]

public IActionResult Edit([FromServices] IMakeRepo makeRepo, int? id)

{

  var car = GetOneCar(id);

  if (car == null)

  {

    return NoContent();

  }

  ViewData["MakeId"] = GetMakes(makeRepo);

  return View(car);

}

Маршрут имеет необязательный параметр

id
, значение которого передается методу с применением параметра
id
. Экземпляр реализации
IMakeRepo
внедряется в метод и используется для создания списка
SelectList
записей
Make
. Посредством вспомогательного метода
GetOneCar()
получается запись
Car
. Если запись
Car
найти не удалось, тогда метод возвращает ошибку
NoContent
. В противном случае он добавляет список
SelectList
записей
Make
в словарь
ViewData
и визуализирует представление
Edit
.

Форму редактирования можно просмотреть по ссылке

/Cars/Edit/1
(рис. 31.8).

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

Метод действия Edit() для POST

Метод действия

Edit()
для
POST
аналогичен методу действия
Create()
для
POST
с отличиями, описанными после кода метода:

[HttpPost("")]

[ValidateAntiForgeryToken]

public IActionResult Edit([FromServices] IMakeRepo makeRepo, int id, Car car)

{

  if (id != car.Id)

  {

    return BadRequest();

  }

  if (ModelState.IsValid)

  {

    _repo.Update(car);

    return RedirectToAction(nameof(Details),new {id = car.Id});

  }

  ViewData["MakeId"] = GetMakes(makeRepo);

  return View(car);

}

Метод действия

Edit()
для
POST
принимает один обязательный параметр маршрута
id
. Если его значение не совпадает со значением
Id
реконструированной сущности
Car
, тогда клиенту отправляется ошибка
BadRequest
. Если состояние модели допустимо, то сущность обновляется, после чего пользователь перенаправляется на метод действия
Details()
с применением свойства
Id
сущности
Car
в качестве параметра маршрута. Здесь также используется шаблон "отправка-перенаправление-получение".

Если состояние модели не является допустимым, то список

SelectList
с записями
Make
добавляется в объект
ViewData
и сущность, которая была отправлена, посылается обратно представлению
Edit
. Состояние модели тоже неявно отправляется представлению, так что могут быть отображены любые ошибки.

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

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

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

@model Car

@{

  ViewData["Title"] = "Delete";

}

<h1>Delete @Model.PetName</h1>

<h3>Are you sure you want to delete this car?</h3>

<div>

  @Html.DisplayForModel()

  <form asp-action="Delete">

    <input type="hidden" asp-for="Id" />

    <input type="hidden" asp-for="TimeStamp" />

    <button type="submit" class="btn btn-danger">

      Delete <i class="fas fa-trash"></i>

    </button>  |  

    <item-list></item-list>

  </form>

</div>

В представлении

Delete
тоже применяется вспомогательная функция
@Html.DisplayForModel()
и два скрытых элемента ввода для
Id
и
TimeStamp
. Это единственные поля, которые отправляются в виде данных формы.

Оригинальный текст книги читать онлайн бесплатно в онлайн-библиотеке Knigger.com