Html.LabelFor văn bản được chỉ định


83

Bất cứ ai có bất kỳ ý tưởng về cách chỉ định văn bản khi sử dụng Html.LabelFor(c=>c.MyField). Nó chỉ MyFieldcó thể không phải là một cái tên thích hợp để hiển thị trên màn hình, bạn có thể muốn "The Super Fantastic Field" thay thế, nhưng dường như không có bất kỳ quá tải nào.

Có ý kiến ​​gì không?

Câu trả lời:


139

Bạn sử dụng System.ComponentModel.DataAnnotations.DisplayAttribute:

[Display(Name = "My Field")]
public string MyField { get; set; }

Đặt thuộc ResourceTypetính trên thuộc tính của bạn sẽ cho phép bạn sử dụng tệp tài nguyên.

(Trước khi sử dụng .NET 4 System.ComponentModel.DisplayNameAttributevới cảnh báo rằng tên hiển thị phải là hằng số thời gian biên dịch.)


9
Bạn là người thắng cuộc. Bạn phải có using System.ComponentModel;mặc dù vậy.
Kezzer

Tôi có trình tạo mã của tôi tự động loại bỏ những thứ này, chèn khoảng trắng giữa các từ dựa trên Pascal. Hoạt động như một sự quyến rũ!
GalacticCowboy

Mặc dù giải pháp này trông khá đẹp, tôi nhận được Error 381 An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type. Vì vậy, giải pháp này có vẻ là không tốt cho l18n.
Martin Thoma,

@moose Tôi đã cập nhật câu trả lời để phản ánh phiên bản mới trong .NET-4 System.ComponentModel.DataAnnotations.DisplayAttributecho phép sử dụng tệp tài nguyên. Nếu bạn chưa vào ngày 4 / 4.5, người già System.ComponentModel.DisplayNameAttributecó thể được mở rộng như vậy: stackoverflow.com/a/2432520/33533
Curtis Buys

@CodeBlend Tôi đang sử dụng T4 để tạo các lớp mô hình với các thuộc tính thích hợp. Tôi đã có một phương pháp chia chuỗi trên các chữ cái viết hoa và sau đó nối lại với một dấu cách. (Đó là 3 năm, do đó, không có mã trước mặt tôi lúc này ...)
GalacticCowboy

51

Giải pháp dễ dàng chỉ cần thêm phần sau vào chế độ xem:

@Html.LabelFor(c=>c.MyField, "My Field")

26

Có một quá tải mới trong MVC 3, vì vậy bạn sẽ có thể kiểm tra tùy chỉnh cụ thể cho trình trợ giúp labelfor.


8
@ Html.LabelFor (model => model.IdCode, "Tên thân thiện")
Dave Mateer

3

Tôi chưa tải xuống v2, vì vậy tôi không thể kiểm tra, nhưng tôi tin rằng nó hoạt động giống như DynamicData, trong trường hợp đó bạn sẽ làm điều gì đó như thế này trên mô hình của mình:

[Display(Name = "The Super Fantastic Field")]
public string MyField {get;set;}

Hiển thị không có sẵn và intellisense cũng không thể tìm thấy nó trong bất kỳ libs nào.
Kezzer

Thêm tham chiếu đến System.ComponentModel.DataAnnotations.dll và thêm bằng cách sử dụng System.ComponentModel.DataAnnotations.
Daniel

Thay vào đó, thêm tham chiếu vào System.ComponentModel.DataAnnotations từ GAC (tức là trong tab .NET của thêm tham chiếu)
Daniel

Tôi đã sử dụng DataAnnotations, vì vậy tham chiếu không phải là vấn đề.
Kezzer

3
À, xin lỗi - đó rõ ràng là Silverlight3 / .NET 4.0: msdn.microsoft.com/en-us/library/… Tôi nghĩ DisplayName sẽ làm được những gì bạn muốn, như itmecurtis gợi ý. Đây là thông tin thêm về điều đó: davidhayden.com/blog/dave/archive/2009/08/19/…
Daniel

2

Có hai cách
1 "chú thích trực tiếp"
2 "Chú thích bằng tài nguyên"
Chú thích trực tiếp

[Display(Name = "My Field")]
public string MyField { get; set; }

Chú thích với một tài nguyên

[Display(Name = "My_Field",ResourceType = typeof(Resource))]
public string MyField { get; set; }

Cách thứ hai sẽ yêu cầu thêm một giá trị trong tệp tài nguyên có thể có tên là Resource.resx .
Sử dụng phù hợp với mục đích của bạn.


0

Tôi chưa kiểm tra CP1 nhưng tôi đã đọc bản phát hành của Scott về nó và dường như tôi nhớ lại rằng mã được tạo bởi T4. Tôi cho rằng bạn luôn có thể sửa đổi điều đó, nhưng tôi nghi ngờ rằng họ sẽ cung cấp quá tải trong CP2.

Chỉnh sửa: Nguồn luôn có sẵn và do đó bạn có thể chỉ cần sửa đổi phương pháp, thay đổi trình tạo T4 và bạn sẽ sẵn sàng. Đồng thời đặt một vé hoặc yêu cầu (bằng cách nào đó) cho bản mod đó để nó hoạt động trong phiên bản tiếp theo.


Thật xấu hổ, tôi đang thực hiện một bản xem trước công việc nhưng nó không thực sự khả thi vì tên trường của chúng tôi khá giả so với phần mô tả của chúng.
Kezzer

0

Có 5 quá tải. Một số cung cấp tham số thứ hai của "string labelText", mà bạn sẽ đặt thành "The Super Fantastic Field".

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.