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

ЖАНРЫ

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

Версия в виде вспомогательной функции дескриптора выглядит так:

<label class="customer" asp-for="FullName">Full Name:</label>

Она производит тот же самый вывод, но вспомогательные функции дескрипторов благодаря своей интеграции с дескрипторами HTML удерживают разработчика "в рамках разметки".

Существует множество встроенных вспомогательных функций дескрипторов, которые предназначены для применения вместо соответствующих им вспомогательных функций HTML. Однако не все вспомогательные функции HTML имеют ассоциированные вспомогательные функции дескрипторов. В табл. 31.2 перечислены самые распространенные вспомогательные функции дескрипторов, соответствующие им вспомогательные функции HTML и доступные атрибуты. Они будут раскрыты более

подробно в оставшейся части главы.

Включение вспомогательных функций дескрипторов

Вспомогательные функции дескрипторов потребуется сделать видимыми любому коду, где их желательно использовать. Файл

_ViewImports.html
из стандартного шаблона уже содержит следующую строку:

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

Строка делает все вспомогательные функции дескрипторов из сборки

Microsoft.AspNetCore.Mvc.TagHelpers
(содержащей все встроенные вспомогательные функции дескрипторов) доступными всем представлениям на уровне каталога с файлом
_ViewImports.cshtml
и ниже него в иерархии каталогов.

Вспомогательная функция дескриптора для формы

Вспомогательная функция дескриптора для формы (

<form>
) заменяет вспомогательные функции HTML с именами
Html.BeginForm
и
Html.BeginRouteForm
. Скажем, чтобы создать форму, которая отправляет версию действия
Edit
для НТТР-метода POST контроллера
CarsController
с одним параметром (
Id
), потребуется следующий код и разметка:

<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
. Добавьте в каталог
Views\Cars
новое пустое представление 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]")]

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="CfDJ8Hqg5HsrvCtOkkLRHY4ukxwv
ix0vkQ3vOvezvtJWdl0P5lwbI5-

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

Поделиться с друзьями: