Sự khác biệt giữa Html.Label, Html.LabelFor và Html.LabelForModel


86

Sự khác biệt giữa những gì @Html.Label(), @Html.LabelFor()@Html.LabelForModel()các phương pháp?


tất cả trong tên của nó. Một dành cho các nhãn chung, một dành cho các nhãn thuộc tính của mô hình cụ thể và một dành cho các nhãn mô hình chung.
Francisco Afonso

6
@FranciscoAfonso Tuy nhiên, điều đó không thực sự giải thích được những gì họ thực sự làm.
Ant P

Câu trả lời:


110

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.LabelForModelphức tạp hơn một chút. Nó trả về một nhãn có forgiá 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>

là nó @Html.EditorFor(m => Test)hay @Html.EditorFor(m => m.Test)?
Fabricio

12

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.


Đây không thực sự LabelForModellà những gì - hãy xem câu trả lời của tôi.
Ant P

6

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:

nhập mô tả hình ảnh ở đây

Tham khảo câu trả lời trên diễn đàn asp.net


4

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


Còn Html.LabelForModel thì sao?
Fabricio

trả về nhãn có chuỗi đại diện cho mô hình, giống như tất cả họ đều làm những gì tên của họ nói ...
Francisco Afonso

xin lỗi, tôi chưa bao giờ thấy và sử dụng @ html.LableForModel :)
Mahesh Chitroda

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.