У чому різниця між @Html.Label()
, @Html.LabelFor()
і @Html.LabelForModel()
методи?
У чому різниця між @Html.Label()
, @Html.LabelFor()
і @Html.LabelForModel()
методи?
Відповіді:
Html.Label
дає вам мітку для введення, ім'я якого відповідає вказаному вхідному тексту (точніше, для властивості моделі, що відповідає рядковому виразу):
// Model
public string Test { get; set; }
// View
@Html.Label("Test")
// Output
<label for="Test">Test</label>
Html.LabelFor
дає вам мітку для властивості, представленої наданим виразом (як правило, властивість моделі):
// Model
public class MyModel
{
[DisplayName("A property")]
public string Test { get; set; }
}
// View
@model MyModel
@Html.LabelFor(m => m.Test)
// Output
<label for="Test">A property</label>
Html.LabelForModel
трохи складніше. Він повертає мітку, for
значення якої є параметром, представленим об’єктом моделі. Це корисно, зокрема, для користувацьких шаблонів редакторів. Наприклад:
// Model
public class MyModel
{
[DisplayName("A property")]
public string Test { get; set; }
}
// Main view
@Html.EditorFor(m => m.Test)
// Inside editor template
@Html.LabelForModel()
// Output
<label for="Test">A property</label>
@Html.EditorFor(m => Test)
чи @Html.EditorFor(m => m.Test)
?
Html.Label
- Просто створює мітку мітки з будь-яким рядком, переданим в конструктор
Html.LabelFor
- Створює мітку для цієї конкретної властивості. Це сильно набрано. За замовчуванням це просто робить ім'я властивості (у наведеному нижче прикладі він виводить MyProperty, якщо цього атрибута Display не було). Ще однією перевагою цього є те, що ви можете встановити властивість відображення у своїй моделі, і ось що буде розміщено тут:
public class MyModel
{
[Display(Name="My property title")
public class MyProperty{get;set;}
}
На ваш погляд:
Html.LabelFor(x => x.MyProperty) //Outputs My property title
У наведеному вище відобразиться LabelFor <label for="MyProperty">My property title</label>
. Це чудово працює, тому ви можете в одному місці визначити, якою буде мітка для цього властивості, і показувати його всюди.
LabelForModel
не для чого - див. Мою відповідь.
Я думаю, що використання @Html.LabelForModel()
доцільно пояснити більш докладно.
Метод LabelForModel повертає елемент мітки HTML та ім'я властивості властивості, представленої моделлю.
Ви можете звернутися до такого коду:
Код у моделі:
using System.ComponentModel;
[DisplayName("MyModel")]
public class MyModel
{
[DisplayName("A property")]
public string Test { get; set; }
}
Розглянутий код:
@Html.LabelForModel()
<div class="form-group">
@Html.LabelFor(model => model.Test, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Test)
@Html.ValidationMessageFor(model => model.Test)
</div>
</div>
Вихідний знімок екрана:
припустимо, вам потрібна мітка з текстом ім’я клієнта, ніж ви можете отримати її двома способами
[1]@Html.Label("CustomerName")
[2]@Html.LabelFor(a => a.CustomerName) //strongly typed
Другий метод використовував властивість з вашої моделі. Якщо у вашому поданні реалізована модель, ви можете використовувати другий метод.
Більше інформації, будь ласка, перейдіть за посиланням нижче
http://weblogs.asp.net/scottgu/archive/2010/01/10/asp-net-mvc-2-strongly-typed-html-helpers.aspx