Язык программирования C#9 и платформа .NET5
Шрифт:
Представление 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>
@Html.EditorForModel
<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>
@section Scripts {
<partial name="_ValidationScriptsPartial" />
}
Вспомогательная
@Html.EditorForModel
использует созданный ранее шаблон отображения (Car.cshtml
) для отображения редактора сведений об автомобиле. В разделе
Scripts
представления указано частичное представление _ValidationScriptsPartial
. Вспомните, что в компоновке этот раздел встречается после загрузки jQuery. Шаблон разделов помогает гарантировать загрузку надлежащих зависимостей до загрузки самого содержимого. Методы действий Create
В рамках процесса создания применяются два метода действий: первый (
HttpGet
) возвращает пустое представление для ввода новой записи, а второй (HttpPut
) отправляет значения новой записи. Вспомогательный метод GetMakes
Вспомогательный метод
GetMakes
возвращает список записей Make
в виде экземпляра SelectList
и принимает в качестве параметра экземпляр реализации IMakeRepo
:
internal SelectList GetMakes(IMakeRepo makeRepo)
=> new SelectList(makeRepo.GetAll, nameof(Make.Id), nameof(Make.Name));
Метод действия Create для GET
Метод действия
Create
для GET
помещает в словарь ViewData
список SelectList
с записями Make
Create
:
[HttpGet]
public IActionResult Create([FromServices] IMakeRepo makeRepo)
{
ViewData["MakeId"] = GetMakes(makeRepo);
return View;
}
Форму создания можно просмотреть по ссылке
/Cars/Create
(рис. 31.7). Метод действия Create для POST
Метод действия
Create
для POST
применяет неявную привязку модели для создания сущности Car
из значений формы. Вот его код:
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Create([FromServices] IMakeRepo makeRepo, Car car)
{
if (ModelState.IsValid)
{
_repo.Add(car);
return RedirectToAction(nameof(Details),new {id = car.Id});
}
ViewData["MakeId"] = GetMakes(makeRepo);
return View(car);
}
Атрибут
HttpPost
помечает метод как конечную точку приложения для маршрута Cars/Create
, когда запросом является POST
. Атрибут ValidateAntiForgeryToken
, использует значение скрытого элемента ввода для __RequestVerificationToken
чтобы сократить количество атак на сайт. Экземпляр реализации
IMakeRepo
внедряется в метод из контейнера DI. Поскольку внедрение осуществляется в метод, применяется атрибут FromServices
. Как вы наверняка помните, атрибут FromServices
сообщает механизму привязки о том, чтобы он не пытался привязывать этот тип, и позволяет контейнеру DI узнать о необходимости создания экземпляра класса. Сущность
Car
неявно привязывается к данным входящего запроса. Если состояние модели (ModelState
) допустимо, тогда сущность Car
добавляется в базу данных и пользователь перенаправляется на метод действия Details
с использованием вновь созданного идентификатора Car
в качестве параметра маршрута. Такой шаблон называется "отправка-перенаправление-получение" (Post-Redirect-Get
). Пользователь выполняет отправку с помощью метода HttpPost(Create
) и затем перенаправляется на метод HttpGet(Details
), что предотвращает повторную отправку браузером запроса POST
, если пользователь решит обновить страницу.
Поделиться:
Популярные книги
Метатель
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