อะไรคือความแตกต่างระหว่าง@Html.Label()
, @Html.LabelFor()
และ@Html.LabelForModel()
วิธีการ?
อะไรคือความแตกต่างระหว่าง@Html.Label()
, @Html.LabelFor()
และ@Html.LabelForModel()
วิธีการ?
คำตอบ:
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)
?
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
มีไว้เพื่อดูคำตอบของฉัน
ฉันคิดว่า@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>
ภาพหน้าจอผลลัพธ์:
สมมติว่าคุณต้องการป้ายชื่อที่มีชื่อกำหนดเองมากกว่าที่จะทำได้โดยใช้ 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