Яка різниця між 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)?
Fabricio

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


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/…
Махеш Чітрода,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.