В чем разница между Html.Label, Html.LabelFor и Html.LabelForModel

86

В чем разница между @Html.Label(), @Html.LabelFor()и @Html.LabelForModel()методы?

Фабрицио
источник
все дело в названии. Один предназначен для общих меток, один - для меток свойств конкретной модели, а третий - для общих меток модели.
Франсиско Афонсу
6
@FranciscoAfonso Однако это не совсем объясняет, что они на самом деле делают.
Ant P

Ответы:

110

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)?
Фабрицио
12

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, для чего - см. Мой ответ.
Ant P
6

Я думаю, что об использовании @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

AlexMelw
источник
4

Предположим, вам нужна этикетка с текстовым именем клиента, чем вы можете получить ее двумя способами

[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

Махеш Читрода
источник
А как насчет Html.LabelForModel?
Фабрицио
возвращает метку со строкой, которая представляет модель, как будто все они делают то, что говорит их имя ...
Франсиско Афонсо
извините, я никогда не видел и не использовал @ html.LableForModel :)
Махеш Читрода
см. ссылку ниже msdn.microsoft.com/en-in/library/…
Махеш Читрода