Was ist der Unterschied zwischen Html.Label, Html.LabelFor und Html.LabelForModel?


86

Was ist der Unterschied zwischen @Html.Label(), @Html.LabelFor()und @Html.LabelForModel()Methoden?


Es ist alles im Namen. Eine ist für allgemeine Beschriftungen, eine für bestimmte Modelleigenschaftsbeschriftungen und eine für allgemeine Modellbeschriftungen.
Francisco Afonso

6
@FranciscoAfonso Das erklärt allerdings nicht wirklich, was sie tatsächlich tun.
Ameise P

Antworten:


110

Html.Label gibt Ihnen eine Bezeichnung für eine Eingabe, deren Name mit dem angegebenen Eingabetext übereinstimmt (insbesondere für die Modelleigenschaft, die dem Zeichenfolgenausdruck entspricht):

// Model
public string Test { get; set; }

// View
@Html.Label("Test")

// Output
<label for="Test">Test</label>

Html.LabelFor gibt Ihnen eine Bezeichnung für die Eigenschaft, die durch den angegebenen Ausdruck dargestellt wird (normalerweise eine Modelleigenschaft):

// 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.LabelForModelist etwas kniffliger. Es gibt eine Bezeichnung zurück, deren forWert der des vom Modellobjekt dargestellten Parameters ist. Dies ist insbesondere für benutzerdefinierte Editorvorlagen nützlich. Beispielsweise:

// 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>

ist es @Html.EditorFor(m => Test)oder @Html.EditorFor(m => m.Test)?
Fabricio

12

Html.Label - Erstellt einfach ein Label-Tag mit der Zeichenfolge, die an den Konstruktor übergeben wird

Html.LabelFor- Erstellt eine Beschriftung für diese bestimmte Eigenschaft. Dies ist stark typisiert. Standardmäßig wird nur der Name der Eigenschaft angegeben (im folgenden Beispiel wird MyProperty ausgegeben, wenn das Display-Attribut nicht vorhanden ist). Ein weiterer Vorteil davon ist, dass Sie die Anzeigeeigenschaft in Ihrem Modell festlegen können. Dies wird hier angegeben:

public class MyModel
{
    [Display(Name="My property title")
    public class MyProperty{get;set;}
}

Aus Ihrer Sicht:

Html.LabelFor(x => x.MyProperty) //Outputs My property title

Oben wird LabelFor angezeigt <label for="MyProperty">My property title</label>. Dies funktioniert gut, sodass Sie an einer Stelle definieren können, wie die Bezeichnung für diese Eigenschaft lauten soll, und sie überall anzeigen lassen können.


Das ist nicht wirklich das, wofür LabelForModel- siehe meine Antwort.
Ameise P

6

Ich denke, dass die Verwendung von @Html.LabelForModel() genauer erklärt werden sollte.

Die LabelForModel-Methode gibt ein HTML-Beschriftungselement und den Eigenschaftsnamen der Eigenschaft zurück, die vom Modell dargestellt wird.

Sie können auf den folgenden Code verweisen:

Code im Modell:

using System.ComponentModel;

[DisplayName("MyModel")]
public class MyModel
{
    [DisplayName("A property")]
    public string Test { get; set; }
}

Code im Blick:

@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>

Der Ausgabe-Screenshot:

Geben Sie hier die Bildbeschreibung ein

Verweis auf Antwort im asp.net Forum


4

Angenommen, Sie benötigen eine Beschriftung mit einem benutzerdefinierten Textnamen, die Sie auf zwei Arten erreichen können

[1]@Html.Label("CustomerName")

[2]@Html.LabelFor(a => a.CustomerName)  //strongly typed

Die zweite Methode verwendete eine Eigenschaft aus Ihrem Modell. Wenn Ihre Ansicht ein Modell implementiert, können Sie die 2. Methode verwenden.

Weitere Infos finden Sie unter Link

http://weblogs.asp.net/scottgu/archive/2010/01/10/asp-net-mvc-2-strongly-typed-html-helpers.aspx


Was ist mit Html.LabelForModel?
Fabricio

gibt ein Etikett mit einer Zeichenfolge zurück, die das Modell darstellt, so wie sie alle tun, was ihr Name sagt ...
Francisco Afonso

Entschuldigung, ich habe @ html.LableForModel noch nie gesehen und benutzt :)
Mahesh Chitroda

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.