Подтвердить что ты не робот

Какая разница между Html.Label, Html.LabelFor и Html.LabelForModel

Какая разница между методами @Html.Label(), @Html.LabelFor() и @Html.LabelForModel()?

4b9b3361

Ответ 1

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>

Ответ 2

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>. Это хорошо работает, поэтому вы можете определить в одном месте, что будет ярлыком для этого свойства, и показать его везде.

Ответ 3

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

Ответ 4

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

[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