it-swarm.com.de

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

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

84
Fabricio

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

// 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 durch den angegebenen Ausdruck dargestellte Eigenschaft (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 etwas kniffliger. Es gibt eine Beschriftung zurück, deren for -Wert der des durch das Modellobjekt dargestellten Parameters ist. Dies ist insbesondere für benutzerdefinierte Editorvorlagen hilfreich. 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>
107
Ant P

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 entspricht dies nur dem Namen der Eigenschaft (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.

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

Ihrer Ansicht nach:

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

Oben zeigt LabelFor <label for="MyProperty">My property title</label>. Dies funktioniert sehr 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.

12
CorrugatedAir

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 sich auf den folgenden Code beziehen:

Code im Modell:

using System.ComponentModel;

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

Code in der Ansicht:

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

enter image description here

Hinweis zur Beantwortung im asp.net-Forum

6
AndreyWD

angenommen, Sie benötigen eine Beschriftung mit einem benutzerdefinierten Textnamen, um sie auf zwei Arten zu erhalten

[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 Informationen finden Sie unter folgendem Link

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

3
Mahesh Chitroda