Язык программирования C#9 и платформа .NET5
Шрифт:
Если состояние модели не является допустимым, то список
SelectList
с записями Make
добавляется в объект ViewData
и сущность, которая была отправлена, посылается обратно представлению Create
. Состояние модели тоже неявно отправляется представлению, так что могут быть отображены любые ошибки. Представление Edit
Создайте в каталоге
Views\Cars
новый файл представления по имени Edit.cshtml
. Удалите весь сгенерированный код и добавьте следующую разметку:
@model Car
@{
ViewData["Title"] = "Edit";
}
<h1>Edit @Model.PetName</h1>
<hr />
<div class="row">
<div class="col-md-4">
<form asp-area="" asp-controller="Cars" asp-action="Edit"
asp-route-id="@Model.Id">
@Html.EditorForModel
<input type="hidden" asp-for="Id" />
<input type="hidden" asp-for="TimeStamp" />
<div class="form-group">
<button type="submit" class="btn btn-primary">
Save <i class="fas fa-save"></i>
</button> |
<item-list></item-list>
</div>
</form>
</div>
</div>
@section Scripts {
<partial name="_ValidationScriptsPartial" />
}
В
@Html.EditorForModel
и частичное представление _ValidationScriptsPartial
. Однако оно еще содержит два скрытых элемента ввода для Id
и TimeStamp
. Они будут отправляться вместе с остальными данными формы, но не должны редактироваться пользователями. Без значений Id
и TimeStamp
не удалось бы сохранять изменения. Методы действий 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). Метод действия Edit для POST
Метод действия
Edit
для POST
аналогичен методу действия Create
для POST
с отличиями, описанными после кода метода:
[HttpPost("{id}")]
[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
Создайте в каталоге
Views\Cars
новый файл представления по имени Delete.cshtml
. Удалите весь сгенерированный код и добавьте следующую разметку:
Поделиться:
Популярные книги
Метатель
1. Метатель
Фантастика:
боевая фантастика
попаданцы
рпг
фэнтези
фантастика: прочее
постапокалипсис
5.00
рейтинг книги
Магия чистых душ
Любовные романы:
любовно-фантастические романы
5.40
рейтинг книги
Барон Дубов
1. Его Дубейшество
Фантастика:
юмористическое фэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 11
11. История Телепата
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон диктует правила
4. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Попытка возврата. Тетралогия
Попытка возврата
Фантастика:
альтернативная история
9.26
рейтинг книги
Долгий путь домой
Вселенная EVE Online
Фантастика:
космическая фантастика
попаданцы
6.20
рейтинг книги
Гардемарин Ее Величества. Инкарнация
1. Гардемарин ее величества
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
фантастика: прочее
5.00
рейтинг книги
Завод-3: назад в СССР
3. Завод
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Решала
10. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Камень. Книга пятая
5. Камень
Фантастика:
боевая фантастика
6.43
рейтинг книги
Отдельный танковый
1. Антиблицкриг
Фантастика:
боевая фантастика
альтернативная история
5.00
рейтинг книги
Метатель. Книга 3
3. Метатель
Фантастика:
попаданцы
альтернативная история
рпг
фэнтези
фантастика: прочее
постапокалипсис
5.00
рейтинг книги
Боярышня Евдокия
3. Боярышня
Фантастика:
попаданцы
альтернативная история
5.00