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

Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core 7

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

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

Посмотрим на примере. Возьмем следующую модель User:

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
}

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

<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 HtmlHelpersApp.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

Строго типизированный хелпер похож на обычный, только в конце прибавляется суффикс For: LabelFor. Так как строго типизированные хелперы могут использоваться только в строго типизированных представлениях, то вначале представления указываем модель, которая будет использоваться: @model HtmlHelpersApp.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" />
    <input name="Enable" type="hidden" value="false">
    
  • 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