Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core
Кроме базовых хелперов в 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>