Đây là một câu hỏi cũ, nhưng các câu trả lời hiện có bỏ qua vấn đề nghiêm trọng là loại bỏ bất kỳ thuộc tính tùy chỉnh nào khi bạn tạo lại mô hình. Tôi đang thêm một câu trả lời chi tiết hơn để bao gồm các tùy chọn hiện tại có sẵn.
Bạn có 3 lựa chọn:
- Thêm một
[DisplayName("Name goes here")]
thuộc tính vào lớp mô hình dữ liệu. Nhược điểm là điều này sẽ bị loại bỏ bất cứ khi nào bạn tạo lại các mô hình dữ liệu.
- Thêm một tham số chuỗi vào của bạn
Html.LabelFor
. ví dụ: @Html.LabelFor(model => model.SomekingStatus, "My New Label", new { @class = "control-label"})
Tham khảo: https://msdn.microsoft.com/en-us/library/system.web.mvc.html.labelextensions.labelfor(v=vs.118).aspx Nhược điểm của điều này là bạn phải lặp lại nhãn ở mọi góc nhìn.
- Tùy chọn thứ ba. Sử dụng một lớp siêu dữ liệu được đính kèm với lớp dữ liệu (chi tiết sau).
Tùy chọn 3 - Thêm một lớp siêu dữ liệu:
Microsoft cho phép trang trí các thuộc tính trên một lớp Entity Framework mà không cần sửa đổi lớp hiện có ! Điều này bằng cách có các lớp siêu dữ liệu gắn vào các lớp cơ sở dữ liệu của bạn (thực sự là một phần mở rộng sang một bên của lớp EF của bạn). Điều này cho phép các thuộc tính được thêm vào lớp được liên kết chứ không phải vào chính lớp để các thay đổi không bị mất khi bạn tạo lại mô hình dữ liệu .
Ví dụ: nếu lớp dữ liệu của bạn MyModel
có thuộc SomekingStatus
tính, bạn có thể làm như sau:
Đầu tiên hãy khai báo một phần lớp có cùng tên (và sử dụng cùng một không gian tên), cho phép bạn thêm một thuộc tính lớp mà không bị ghi đè:
[MetadataType(typeof(MyModelMetaData))]
public partial class MyModel
{
}
Tất cả các lớp mô hình dữ liệu được tạo đều là các lớp một phần, cho phép bạn thêm các thuộc tính và phương thức bổ sung bằng cách tạo thêm các lớp cùng tên (điều này rất tiện dụng và tôi thường sử dụng nó, ví dụ: để cung cấp các phiên bản chuỗi được định dạng của các loại trường khác trong mô hình ).
Bước 2: thêm một lớp siêu dữ liệu được tham chiếu bởi lớp một phần mới của bạn:
public class MyModelMetaData
{
[DisplayName("My New Label")]
public string SomekingStatus;
}
Tham khảo: https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.metadatatypeattribute(v=vs.110).aspx
Ghi chú:
- Từ bộ nhớ, nếu bạn bắt đầu sử dụng một lớp siêu dữ liệu, nó có thể bỏ qua các thuộc tính hiện có trên lớp thực tế (
[required]
v.v.), vì vậy bạn có thể cần phải sao chép các thuộc tính đó trong lớp Siêu dữ liệu.
- Điều này không hoạt động bằng phép thuật và sẽ không chỉ hoạt động với bất kỳ lớp nào. Mã tìm kiếm các thuộc tính trang trí giao diện người dùng được thiết kế để tìm kiếm một lớp siêu dữ liệu trước tiên.