ความแตกต่างระหว่าง Html.Label, Html.LabelFor และ Html.LabelForModel ต่างกันอย่างไร


87

อะไรคือความแตกต่างระหว่าง@Html.Label(), @Html.LabelFor()และ@Html.LabelForModel()วิธีการ?


ทั้งหมดนี้อยู่ในชื่อ หนึ่งสำหรับเลเบลทั่วไปหนึ่งสำหรับเลเบลคุณสมบัติของโมเดลเฉพาะและอีกอันสำหรับเลเบลโมเดลทั่วไป
Francisco Afonso

6
@FranciscoAfonso นั่นไม่ได้อธิบายถึงสิ่งที่พวกเขาทำจริงๆ
Ant P

คำตอบ:


111

Html.Label ให้เลเบลสำหรับอินพุตที่มีชื่อตรงกับข้อความอินพุตที่ระบุ (โดยเฉพาะอย่างยิ่งสำหรับคุณสมบัติ model ที่ตรงกับนิพจน์สตริง):

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

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

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

Html.LabelFor ให้เลเบลสำหรับคุณสมบัติที่แสดงโดยนิพจน์ที่ให้มา (โดยทั่วไปคือคุณสมบัติโมเดล):

// 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ค่อนข้างยุ่งยากกว่า ส่งคืนป้ายที่มีforค่าของพารามิเตอร์ที่แสดงโดยออบเจ็กต์โมเดล สิ่งนี้มีประโยชน์โดยเฉพาะอย่างยิ่งสำหรับเทมเพลตตัวแก้ไขที่กำหนดเอง ตัวอย่างเช่น:

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

12

Html.Label - เพียงสร้างแท็กป้ายกำกับด้วยสตริงที่ส่งผ่านเข้าไปในตัวสร้างคืออะไร

Html.LabelFor- สร้างป้ายกำกับสำหรับคุณสมบัตินั้น ๆ นี่คือการพิมพ์อย่างรุนแรง ตามค่าเริ่มต้นสิ่งนี้จะทำเพียงแค่ชื่อของคุณสมบัติ (ในตัวอย่างด้านล่างนี้จะแสดงผล MyProperty หากไม่มีแอตทริบิวต์ Display นั้น) ข้อดีอีกประการหนึ่งคือคุณสามารถตั้งค่าคุณสมบัติการแสดงผลในโมเดลของคุณและนั่นคือสิ่งที่จะใส่ไว้ที่นี่:

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

ในมุมมองของคุณ:

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

จากด้านบน LabelFor จะแสดง<label for="MyProperty">My property title</label>ขึ้น วิธีนี้ใช้งานได้ดีเพื่อให้คุณสามารถกำหนดได้ในที่เดียวว่าป้ายกำกับสำหรับคุณสมบัตินั้นจะเป็นอย่างไรและแสดงทุกที่


นี่ไม่ใช่สิ่งที่LabelForModelมีไว้เพื่อดูคำตอบของฉัน
Ant P

6

ฉันคิดว่า@Html.LabelForModel()ควรอธิบายการใช้งานในรายละเอียดเพิ่มเติม

LabelForModel Method ส่งคืนองค์ประกอบป้ายกำกับ HTML และชื่อคุณสมบัติของคุณสมบัติที่แสดงโดยโมเดล

คุณสามารถอ้างถึงรหัสต่อไปนี้:

รหัสในรุ่น:

using System.ComponentModel;

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

รหัสในมุมมอง:

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

ภาพหน้าจอผลลัพธ์:

ป้อนคำอธิบายภาพที่นี่

อ้างอิงคำตอบในฟอรัม asp.net


4

สมมติว่าคุณต้องการป้ายชื่อที่มีชื่อกำหนดเองมากกว่าที่จะทำได้โดยใช้ 2 วิธี

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

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

วิธีที่ 2 ใช้คุณสมบัติจากโมเดลของคุณ หากมุมมองของคุณใช้โมเดลคุณสามารถใช้วิธีที่ 2 ได้

ข้อมูลเพิ่มเติมกรุณาเยี่ยมชมลิงค์ด้านล่าง

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


แล้ว Html.LabelForModel ล่ะ?
Fabricio

ส่งคืนป้ายกำกับด้วยสตริงที่แสดงถึงโมเดลเช่นเดียวกับที่ทุกคนทำตามที่ชื่อของพวกเขาบอก ...
Francisco Afonso

ขออภัยฉันไม่เคยเห็นและใช้ @ html.LableForModel :)
Mahesh Chitroda

ดูลิงค์ด้านล่าง msdn.microsoft.com/en-in/library/…
Mahesh Chitroda
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.