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


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


76
2018-05-02 19:27


Ursprung


Antworten:


Html.Label gibt Ihnen eine Bezeichnung für eine Eingabe, deren Name mit dem angegebenen Eingabetext übereinstimmt (genauer gesagt, 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 bereitgestellten 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.LabelForModel ist ein bisschen schwieriger. Es gibt ein Label zurück, dessen for value ist der Wert des vom Modellobjekt dargestellten Parameters. 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>

101
2018-05-02 20:09



Html.Label - Erzeugt nur ein Label-Tag mit dem, was die Zeichenfolge in den Konstruktor ist

Html.LabelFor - Erstellt eine Bezeichnung für diese spezifische Eigenschaft. Dies ist stark typisiert. Standardmäßig führt dies nur den Namen der Eigenschaft aus (im folgenden Beispiel wird MyProperty ausgegeben, wenn das Display-Attribut nicht vorhanden war). Ein weiterer Vorteil ist, dass Sie die Anzeigeeigenschaft in Ihrem Modell festlegen können.

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

Ihrer Meinung nach:

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

Oben wird LabelFor angezeigt <label for="MyProperty">My property title</label>. Dies funktioniert gut, so dass Sie an einer Stelle definieren können, was das Label für diese Eigenschaft sein wird und es überall anzeigen lassen.


12
2018-05-02 20:06



Ich denke, dass die Verwendung von @Html.LabelForModel() sollte näher erläutert werden.

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

Sie könnten 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 in Sicht:

@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 Output-Screenshot:

enter image description here

Referenz auf die Antwort auf dem asp.net-Forum


6
2018-04-21 20:57



Angenommen, Sie benötigen ein Etikett mit dem Kundennamen des Kunden, als Sie es auf 2 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 zweite Methode verwenden.

Mehr Informationen finden Sie unter dem folgenden Link

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


3
2018-05-02 19:52