Строго типизированные хелперы

Последнее обновление: 29.03.2022

Кроме базовых html-хелперов форм в ASP.NET Core MVC можно использовать их двойники - строго типизированные хелперы. Этот вид хелперов принимает в качестве параметра делегат, через который указывается свойство модели, к которому должен быть привязан данный хелпер. Важно учитывать, что строго типизированные хелперы могут использоваться только в строго типизированных представлениях, а тип модели, которая передается в хелпер, должен быть тем же самым, что указан для всего представления с помощью директивы @model.

Посмотрим на примере. Допустим, в проекте в папке Models у нас есть следующая модель User:

namespace MvcApp.Models
{
    public record class User(int Id, string Name, int Age);
}

Для создания объекта этой модели мы могли бы использовать следующую форму:

<form method="post" action="~/Home/Create">
    <p>
        <label>Имя</label><br />
        <input type="text" name="Name" />
    </p>
    <p>
        <label>Возраст</label><br />
        <input type="number" name="Age" />
    </p>
    <p>
        <input type="submit" value="Отправить" />
    </p>
</form>

Перепишем этот пример с использованием строго типизированных хелперов::

@model MvcApp.Models.User

@using (Html.BeginForm("Create", "Home", FormMethod.Post))
{
    <p>
        @Html.LabelFor(m=>m.Name, "Имя")<br />
        @Html.TextBoxFor(m=>m.Name)
    </p>
    <p>
        @Html.LabelFor(m => m.Age, "Возраст")<br />
        @Html.TextBoxFor(m=>m.Age, "", new { type = "number" })
    </p>
    <p>
        <input type="submit" value="Отправить" />
    </p>
}
строго типизированные хелперы в ASP.NET Core MVC и C#

Строго типизированный хелпер похож на обычный, только в конце прибавляется суффикс For: LabelFor. Так как строго типизированные хелперы могут использоваться только в строго типизированных представлениях, то вначале представления указываем модель, которая будет использоваться:

@model MvcApp.Models.User

То есть, в вызове @Html.TextBoxFor(m=>m.Name) параметр m представляет переменную модели User. А лямбда-выражение m=>m.Age указывает, что данный хелпер будет генерировать поле для свойства Age. Таким образом, хелпер @Html.TextBoxFor(m=>m.Age, "", new { type = "number" }) сгенерирует поле:

<input data-val="true" data-val-required="The Age field is required." id="Age" name="Age" type="number" value="">

Кроме стандартных атрибутов строго типизированные хелперы также добавляют атрибуты валидации типа data-val и data-val-required, которые будут рассмотрены в соответствующей теме.

Для каждого базового встроенного хелпера имеется свой строго типизированный хелпер:

  • Html.HiddenFor

    Выражение @Html.HiddenFor(m=> m.Id) создает разметку:

    <input id="Id" name="Id" type="hidden" value="[значение_m.Id]" />

  • Html.CheckBoxFor

    Выражение @Html.CheckBoxFor(m=>m.Enable, false) формирует элемент:

    <input id="Enable" name="Enable" type="checkbox" value="true" />

  • Html.LabelFor

    Хелпер @Html.LabelFor(m => m.Name,"Имя") генерирует разметку:

    <label for="Name">Имя</label>

  • Html.PasswordFor

    Хелпер @Html.PasswordFor(m => m.Password) создает разметку:

    <input id="Password" name="Password" type="password" />

  • Html.RadioButtonFor

    @Html.RadioButtonFor(m => m.Option, "val") генерирует разметку:

    <input id="Option" name="Option" type="radio" value="val" />

  • Html.TextBoxFor

    Выражение

    @Html.TextBoxFor(m => m.Name) создает разметку:

    <input id="Name" name="Name" type="text" />

  • Html.TextAreaFor

    Хелпер @Html.TextAreaFor(m => m.Name,10,9,null) генерирует код:

    <textarea cols="9" id="Name" name="Name" rows="10" ></textarea>

  • Html.DropDownListFor

    Создает выпадающий список select с одиночным выбором для установки свойства модели

  • Html.ListBoxFor

    Создает список select со множественным выбором для определенного свойства модели. Подходит, если свойство модели представляет массив или список

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850