Apa perbedaan antara Html.Label, Html.LabelFor dan Html.LabelForModel

87

Apa perbedaan antara @Html.Label(), @Html.LabelFor()dan @Html.LabelForModel()metode?

Fabricio
sumber
semuanya atas nama. Satu untuk label umum, satu untuk label properti model tertentu, dan satu lagi untuk label model umum.
Francisco Afonso
6
@FranciscoAfonso Itu tidak menjelaskan apa yang sebenarnya mereka lakukan.
Ant P

Jawaban:

111

Html.Label memberi Anda label untuk masukan yang namanya cocok dengan teks masukan yang ditentukan (lebih khusus lagi, untuk properti model yang cocok dengan ekspresi string):

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

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

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

Html.LabelFor memberi Anda label untuk properti yang diwakili oleh ekspresi yang disediakan (biasanya properti model):

// 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.LabelForModelsedikit lebih rumit. Ini mengembalikan label yang fornilainya adalah parameter yang diwakili oleh objek model. Ini berguna, khususnya, untuk template editor kustom. Sebagai contoh:

// 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>
Semut P.
sumber
apakah itu @Html.EditorFor(m => Test)atau @Html.EditorFor(m => m.Test)?
Fabricio
12

Html.Label - Hanya membuat tag label dengan string apa pun yang diteruskan ke konstruktor

Html.LabelFor- Membuat label untuk properti khusus tersebut. Ini diketik dengan kuat. Secara default, ini hanya akan melakukan nama properti (dalam contoh di bawah ini, ini akan menampilkan MyProperty jika atribut Display itu tidak ada). Manfaat lain dari ini adalah Anda dapat mengatur properti tampilan dalam model Anda dan itulah yang akan diletakkan di sini:

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

Dalam pandangan Anda:

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

Di atas, LabelFor akan ditampilkan <label for="MyProperty">My property title</label>. Ini berfungsi dengan baik sehingga Anda dapat menentukan di satu tempat akan seperti apa label untuk properti itu dan menampilkannya di mana-mana.

CorrugatedAir
sumber
Ini sebenarnya bukan untuk apa LabelForModel- lihat jawaban saya.
Ant P
6

Menurut saya penggunaan dari @Html.LabelForModel()harus dijelaskan lebih detail.

Metode LabelForModel mengembalikan elemen label HTML dan nama properti dari properti yang diwakili oleh model.

Anda bisa merujuk ke kode berikut:

Kode dalam model:

using System.ComponentModel;

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

Kode dalam tampilan:

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

Tangkapan layar keluaran:

masukkan deskripsi gambar di sini

Referensi jawaban di forum asp.net

AlexMelw
sumber
4

misalkan Anda membutuhkan label dengan nama kustom teks daripada Anda dapat mencapainya dengan 2 cara

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

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

Metode kedua menggunakan properti dari model Anda. Jika tampilan Anda mengimplementasikan model, Anda dapat menggunakan metode ke-2.

Info lebih lanjut silakan kunjungi tautan di bawah ini

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

Mahesh Chitroda
sumber
Bagaimana dengan Html.LabelForModel?
Fabricio
mengembalikan label dengan string yang mewakili model, seperti mereka semua melakukan apa yang dikatakan namanya ...
Francisco Afonso
maaf saya tidak pernah melihat dan menggunakan @ html.LableForModel :)
Mahesh Chitroda
lihat tautan di bawah msdn.microsoft.com/en-in/library/…
Mahesh Chitroda