Qual è la differenza tra @Html.Label()
, @Html.LabelFor()
e @Html.LabelForModel()
metodi?
Qual è la differenza tra @Html.Label()
, @Html.LabelFor()
e @Html.LabelForModel()
metodi?
Risposte:
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 for
valore è 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)
?
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.
LabelForModel
serve - vedi la mia risposta.
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:
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