Qual è la differenza tra Html.Label, Html.LabelFor e Html.LabelForModel


86

Qual è la differenza tra @Html.Label(), @Html.LabelFor()e @Html.LabelForModel()metodi?


è tutto nel nome. Uno è per le etichette generali, uno per le etichette delle proprietà del modello specifiche e uno per le etichette del modello generale.
Francisco Afonso

6
@FranciscoAfonso Questo non spiega davvero cosa fanno effettivamente, però.
Ant P

Risposte:


110

Html.Label fornisce un'etichetta per un input il cui nome corrisponde al testo di input specificato (più specificamente, per la proprietà del modello che corrisponde all'espressione stringa):

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

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

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

Html.LabelFor fornisce un'etichetta per la proprietà rappresentata dall'espressione fornita (in genere una proprietà del modello):

// 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è un po 'più complicato. Restituisce un'etichetta il cui forvalore è quello del parametro rappresentato dall'oggetto del modello. Ciò è utile, in particolare, per i modelli di editor personalizzati. Per esempio:

// 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)o @Html.EditorFor(m => m.Test)?
Fabricio

12

Html.Label - Crea solo un tag etichetta con qualunque sia la stringa passata al costruttore

Html.LabelFor- Crea un'etichetta per quella specifica proprietà. Questo è fortemente digitato. Per impostazione predefinita, questo farà solo il nome della proprietà (nell'esempio seguente, restituirà MyProperty se l'attributo di visualizzazione non era presente). Un altro vantaggio di questo è che puoi impostare la proprietà di visualizzazione nel tuo modello ed è quello che verrà inserito qui:

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

Secondo te:

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

In quanto sopra, verrà visualizzato LabelFor <label for="MyProperty">My property title</label>. Funziona bene in modo da poter definire in un unico punto quale sarà l'etichetta per quella proprietà e mostrarla ovunque.


Questo non è esattamente ciò che LabelForModelserve - vedi la mia risposta.
Ant P

6

Penso che l'uso di @Html.LabelForModel()dovrebbe essere spiegato in modo più dettagliato.

Il metodo LabelForModel restituisce un elemento etichetta HTML e il nome della proprietà della proprietà rappresentata dal modello.

Potresti fare riferimento al seguente codice:

Codice nel modello:

using System.ComponentModel;

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

Codice in vista:

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

Lo screenshot di output:

inserisci qui la descrizione dell'immagine

Riferimento alla risposta sul forum asp.net


4

supponi di aver bisogno di un'etichetta con il testo customername che puoi ottenere usando 2 modi

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

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

Il secondo metodo ha utilizzato una proprietà del tuo modello. Se la tua vista implementa un modello, puoi usare il secondo metodo.

Maggiori informazioni si prega di visitare il link sottostante

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


Che mi dici di Html.LabelForModel?
Fabricio

restituisce un'etichetta con una stringa che rappresenta il modello, come se tutti facessero quello che dice il loro nome ...
Francisco Afonso

scusa non ho mai visto e usato @ html.LableForModel :)
Mahesh Chitroda

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.