Sự khác biệt giữa những gì @Html.Label()
, @Html.LabelFor()
và @Html.LabelForModel()
các phương pháp?
Sự khác biệt giữa những gì @Html.Label()
, @Html.LabelFor()
và @Html.LabelForModel()
các phương pháp?
Câu trả lời:
Html.Label
cung cấp cho bạn nhãn cho một đầu vào có tên khớp với văn bản đầu vào được chỉ định (cụ thể hơn, cho thuộc tính mô hình khớp với biểu thức chuỗi):
// Model
public string Test { get; set; }
// View
@Html.Label("Test")
// Output
<label for="Test">Test</label>
Html.LabelFor
cung cấp cho bạn một nhãn cho thuộc tính được đại diện bởi biểu thức được cung cấp (thường là thuộc tính mô hình):
// 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
phức tạp hơn một chút. Nó trả về một nhãn có for
giá trị của tham số được đại diện bởi đối tượng mô hình. Điều này đặc biệt hữu ích cho các mẫu trình chỉnh sửa tùy chỉnh. Ví dụ:
// 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)
hay @Html.EditorFor(m => m.Test)
?
Html.Label
- Chỉ cần tạo một thẻ nhãn với bất kỳ chuỗi nào được truyền vào hàm tạo là
Html.LabelFor
- Tạo nhãn cho thuộc tính cụ thể đó. Điều này được đánh máy mạnh mẽ. Theo mặc định, điều này sẽ chỉ thực hiện tên của thuộc tính (trong ví dụ dưới đây, nó sẽ xuất ra MyProperty nếu thuộc tính Hiển thị đó không có ở đó). Một lợi ích khác của việc này là bạn có thể đặt thuộc tính hiển thị trong mô hình của mình và đó là những gì sẽ được đặt ở đây:
public class MyModel
{
[Display(Name="My property title")
public class MyProperty{get;set;}
}
Theo quan điểm của bạn:
Html.LabelFor(x => x.MyProperty) //Outputs My property title
Ở trên, LabelFor sẽ hiển thị <label for="MyProperty">My property title</label>
. Điều này hoạt động tốt để bạn có thể xác định ở một nơi nhãn cho thuộc tính đó sẽ là gì và hiển thị ở mọi nơi.
LabelForModel
là những gì - hãy xem câu trả lời của tôi.
Tôi nghĩ rằng cách sử dụng của @Html.LabelForModel()
nên được giải thích chi tiết hơn.
Phương thức LabelForModel trả về một phần tử nhãn HTML và tên thuộc tính của thuộc tính được đại diện bởi mô hình.
Bạn có thể tham khảo đoạn mã sau:
Mã trong mô hình:
using System.ComponentModel;
[DisplayName("MyModel")]
public class MyModel
{
[DisplayName("A property")]
public string Test { get; set; }
}
Mã trong chế độ xem:
@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>
Ảnh chụp màn hình đầu ra:
giả sử bạn cần một nhãn có tên khách hàng văn bản hơn bạn có thể đạt được nó bằng 2 cách
[1]@Html.Label("CustomerName")
[2]@Html.LabelFor(a => a.CustomerName) //strongly typed
Phương pháp thứ hai sử dụng một thuộc tính từ mô hình của bạn. Nếu chế độ xem của bạn triển khai một mô hình thì bạn có thể sử dụng phương pháp thứ hai.
Thông tin thêm vui lòng truy cập liên kết dưới đây
http://weblogs.asp.net/scottgu/archive/2010/01/10/asp-net-mvc-2-strongly-typed-html-helpers.aspx