В чем разница между @Html.Label()
, @Html.LabelFor()
и @Html.LabelForModel()
методы?
asp.net-mvc
razor
Фабрицио
источник
источник
Ответы:
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>
Выходной снимок экрана:
Ссылка на ответ на форуме asp.net
источник
Предположим, вам нужна этикетка с текстовым именем клиента, чем вы можете получить ее двумя способами
[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
источник