Чтение онлайн

на главную - закладки

Жанры

Язык программирования 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>&nbsp;&nbsp;|&nbsp;&nbsp;

<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
, если пользователь решит обновить страницу.

Поделиться:
Популярные книги

Делегат

Астахов Евгений Евгеньевич
6. Сопряжение
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Делегат

Я – Орк. Том 4

Лисицин Евгений
4. Я — Орк
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я – Орк. Том 4

Краш-тест для майора

Рам Янка
3. Серьёзные мальчики в форме
Любовные романы:
современные любовные романы
эро литература
6.25
рейтинг книги
Краш-тест для майора

Запределье

Михайлов Дем Алексеевич
6. Мир Вальдиры
Фантастика:
фэнтези
рпг
9.06
рейтинг книги
Запределье

Кодекс Охотника. Книга ХХ

Винокуров Юрий
20. Кодекс Охотника
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга ХХ

Возвышение Меркурия. Книга 8

Кронос Александр
8. Меркурий
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 8

Секси дед или Ищу свою бабулю

Юнина Наталья
Любовные романы:
современные любовные романы
7.33
рейтинг книги
Секси дед или Ищу свою бабулю

Огни Эйнара. Долгожданная

Макушева Магда
1. Эйнар
Любовные романы:
любовно-фантастические романы
эро литература
5.00
рейтинг книги
Огни Эйнара. Долгожданная

Темный Охотник

Розальев Андрей
1. КО: Темный охотник
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Темный Охотник

Мужчина не моей мечты

Ардова Алиса
1. Мужчина не моей мечты
Любовные романы:
любовно-фантастические романы
8.30
рейтинг книги
Мужчина не моей мечты

Как я строил магическую империю 2

Зубов Константин
2. Как я строил магическую империю
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Как я строил магическую империю 2

Внешняя Зона

Жгулёв Пётр Николаевич
8. Real-Rpg
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Внешняя Зона

Идеальный мир для Социопата 5

Сапфир Олег
5. Социопат
Фантастика:
боевая фантастика
рпг
5.50
рейтинг книги
Идеальный мир для Социопата 5

Приручитель женщин-монстров. Том 1

Дорничев Дмитрий
1. Покемоны? Какие покемоны?
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Приручитель женщин-монстров. Том 1