<form method="post" asp-controller="Cars" asp-action="Edit"
asp-route-id="@Model.Id" >
<!-- Для краткости не показано -->
</form>
С точки зрения строгой HTML-разметки дескриптор <form> будет работать без атрибутов вспомогательной функции дескриптора для формы. Если атрибуты отсутствуют, тогда это просто обычная HTML-форма, к которой понадобится вручную добавить маркер защиты от подделки. Тем не менее, после добавления одного из атрибутов asp-* к форме добавляется и маркер защиты от подделки, который можно отключить, добавив к дескриптору <form> атрибут asp-antiforgery="false". Маркер защиты от подделки рассматривается позже в главе.
Форма создания для сущности Car
Форма создания для сущности Car отправляется методу действия Create() класса CarsController. Добавьте в каталог ViewsCars новое пустое представление Razor по имени Create.cshtml со следующим содержимым:
@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">
</form>
</div>
</div>
Хотя представление не полное, его достаточно для демонстрации того, что было раскрыто до сих пор, а также вспомогательной функции дескриптора для формы. Первая строка строго типизирует представление сущностным классом Car. Блок кода Razor устанавливает специфичный к представлению заголовок для страницы HTML-дескриптор <form> имеет атрибуты asp-controller и asp-action, которые выполняются на серверной стороне для формирования дескриптора, а также добавления маркера защиты от подделки. Чтобы визуализировать это представление, добавьте в каталог Controllers новый контроллер по имени CarsController. Модифицируйте код, как показано ниже (позже в главе он будет обновлен):
using Microsoft.AspNetCore.Mvc;
namespace AutoLot.Mvc.Controllers
{
[Route("[controller]/[action]")]
(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})
public class CarsController : Controller
{
public IActionResult Create()
{
return View();
}
}
}
Теперь запустите приложение и перейдите по ссылке http://localhost:5001/Cars/Create. Инспектирование источника покажет, что форма имеет атрибут действия (action), основанный на asp-controller и asp-action, метод (method), установленный в post, и добавленный скрытый элемент <input> с именем __RequestVerificationToken:
<form action="/Cars/Create" method="post">
<input name="__RequestVerificationToken" type="hidden"
value="CfDJ8Hqg5HsrvCtOkkLRHY4ukxwvix0vkQ3vOvezvtJWdl0P5lwbI5-
FFWXh8KCFZo7eKxveCuK8NRJywj8Jz23pP2nV37fIGqqcITRyISGgq7tRYZDuPv8N
MIYz2nCWRiDbxOvlkg61DTDW9BrJxr8H63Y">
</form>
Далее в главе представление Create будет неоднократно обновляться.
Вспомогательная функция дескриптора для действия формы
Вспомогательная функция дескриптора для действия формы используется в элементах кнопок и изображений с целью изменения действия содержащей их формы. Например, следующая кнопка, добавленная к форме редактирования, вызовет передачу запроса POST конечной точке Create:
<button type="submit" asp-action="Create">Index</button>
Вспомогательная функция дескриптора для якоря
Вспомогательная функция дескриптора для якоря (<а>) заменяет вспомогательную функцию HTML с именем Html.ActionLink(). Скажем, чтобы создать ссылку на представление RazorSyntax, применяйте такой код:
<a class="nav-link text-dark" asp-area="" asp-controller="Home"
asp-action="RazorSyntax">
Razor Syntax
</a>
Для добавления страницы синтаксиса Razor в меню модифицируйте _Menu.cshtml, как показано ниже, добавив новый элемент меню между элементами Home (Домой) и Privacy (Секретность) (дескрипторы <li>, окружающие дескрипторы якорей, предназначены для меню Bootstrap):