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

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

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

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

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

public class Purchase
{
    public int PurchaseId { get; set; }
    public string Person { get; set; }
    public string Address { get; set; }
    public int BookId { get; set; }
    public DateTime Date { get; set; }
}

И для ее использования применялась следующая форма:

<form method="post" action="">
    <input type="hidden" value="@ViewBag.BookId" name="BookId" />
        <table>
            <tr><td><p>Введите свое имя </p></td>
					<td><input type="text" name="Person" /> </td></tr>
            <tr><td><p>Введите адрес :</p></td><td> 
                   <input type="text" name="Address" /> </td></tr>
            <tr><td><input type="submit" value="Отправить" /> </td>
					<td></td></tr>
    </table>
</form>

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

@model BookStore.Models.Purchase
@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

    <div>
        <h3>Форма оформления покупки</h3>
        @using(Html.BeginForm("Buy", "Home", FormMethod.Post))
        {
            @Html.HiddenFor(m=>m.BookId)
            @Html.LabelFor(m => m.Person,"Введите свое имя")
            <br />
            @Html.TextBoxFor(m=>m.Person)
            <br /><br />
            @Html.LabelFor(m => m.Address, "Введите адрес")
            <br />
            @Html.TextBoxFor(m=>m.Address)
            <p><input type="submit" value="Отправить" /></p>
        }
    </div>

Строго типизированный хелпер похож на обычный, только в конце прибавляется суффикс For: LabelFor. Так как строго типизированные хелперы могут использоваться только в строго типизированных представлениях, то вначале представления указываем модель, которая будет использоваться: @model BookStore.Models.Purchase. То есть, в вызове @Html.TextBoxFor(m=>m.Person) параметр m представляет переменную модели Purchase. А лямбда-выражение m=>m.Person указывает, что данный хелпер будет генерировать текстовое поле для свойства Person. Таким образом, хелпер @Html.TextBoxFor(m=>m.Person) сгенерирует текстовое поле <input id="Person" name="Person" type="text" value="" />.

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

  • Html.CheckBoxFor

    Выражение @Html.CheckBoxFor(m=>m.Enable, false) cоздает разметку:

    <input id="Enable" name="Enable" type="checkbox" value="true" />
    <input name="Enable" type="hidden" value="false" />
    
  • Html.HiddenFor

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

    <input id="Name" name="Name" type="hidden" value="значение m.Name" />

  • 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>

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