Html.Label, Html.LabelFor ve Html.LabelForModel arasındaki fark nedir


87

Arasındaki fark nedir @Html.Label(), @Html.LabelFor()ve @Html.LabelForModel()yöntemler?


hepsi adına. Biri genel etiketler için, biri özel model özellik etiketleri ve diğeri genel model etiketleri içindir.
Francisco Afonso

6
@FranciscoAfonso Bu aslında ne yaptıklarını açıklamıyor.
Ant P

Yanıtlar:


111

Html.Label size adı belirtilen girdi metniyle eşleşen bir girdi için bir etiket verir (daha spesifik olarak, dize ifadesiyle eşleşen model özelliği için):

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

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

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

Html.LabelFor size sağlanan ifade tarafından temsil edilen özellik için bir etiket verir (tipik olarak bir model özelliği):

// 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.LabelForModelbiraz daha zor. forDeğeri model nesnesi tarafından temsil edilen parametrenin değeri olan bir etiket döndürür . Bu, özellikle özel düzenleyici şablonları için kullanışlıdır. Örneğin:

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

öyle @Html.EditorFor(m => Test)ya @Html.EditorFor(m => m.Test)?
Fabricio

12

Html.Label - Yapıcıya aktarılan dize ne olursa olsun bir etiket etiketi oluşturur

Html.LabelFor- Söz konusu mülk için bir etiket oluşturur. Bu kesinlikle yazılmıştır. Varsayılan olarak, bu sadece mülkün adını yapacaktır (aşağıdaki örnekte, bu Display özniteliği orada değilse MyProperty sonucunu verecektir). Bunun bir başka yararı da, modelinizde display özelliğini ayarlayabilmenizdir ve bu buraya yazılacak:

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

Size göre:

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

Yukarıda LabelFor görüntülenecektir <label for="MyProperty">My property title</label>. Bu güzel çalışır, böylece o mülkün etiketinin ne olacağını tek bir yerde tanımlayabilir ve her yerde göstermesini sağlayabilirsiniz.


Bu gerçekten LabelForModelbunun için değil - cevabıma bakın.
Ant P

6

Kullanımının @Html.LabelForModel()daha detaylı anlatılması gerektiğini düşünüyorum .

LabelForModel Yöntemi, bir HTML etiket öğesi ve model tarafından temsil edilen özelliğin özellik adını döndürür.

Aşağıdaki koda başvurabilirsiniz:

Modeldeki kod:

using System.ComponentModel;

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

Görünümdeki kod:

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

Çıktı ekran görüntüsü:

görüntü açıklamasını buraya girin

Asp.net forumundaki cevap referansı


4

2 yolla elde edebileceğinizden daha fazla özel ad içeren bir etikete ihtiyacınız olduğunu varsayalım

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

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

2. yöntem, modelinizden bir özellik kullandı. Görünümünüz bir modeli uyguluyorsa, 2. yöntemi kullanabilirsiniz.

Daha fazla bilgi lütfen aşağıdaki bağlantıyı ziyaret edin

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


Html.LabelForModel ne olacak?
Fabricio

Modeli temsil eden bir dizeye sahip bir etiket döndürür, tıpkı hepsi adının söylediği gibi yapar ...
Francisco Afonso

üzgünüm hiç görmedim ve kullanmadım @ html.LableForModel :)
Mahesh Chitroda

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.