tôi có phương pháp helper sau trong một lớp học ViewModelBase
, được thừa hưởng bởi mô hình điểm khác:tên hiển thị MVC.net get enum theo quan điểm mà không cần phải tham khảo kiểu enum theo quan điểm
public string GetEnumName<T>(Enum value)
{
Type enumType = typeof(T);
var enumValue = Enum.GetName(enumType, value);
MemberInfo member = enumType.GetMember(enumValue)[0];
var attrs = member.GetCustomAttributes(typeof(DisplayAttribute), false);
var outString = ((DisplayAttribute)attrs[0]).Name;
if (((DisplayAttribute)attrs[0]).ResourceType != null)
{
outString = ((DisplayAttribute)attrs[0]).GetName();
}
return outString;
}
sau đó tôi gọi này từ quan điểm như thế này:
<p>
@{var rel = Model.GetEnumDisplayName<Enums.wheteverEnum>(Model.wheteverEnum); }
@rel
</p>
Câu hỏi là - tôi có thể làm việc phương pháp này vì vậy tôi không phải nói với nó kiểu của enum
? Về cơ bản tôi muốn todo này cho tất cả enum
s:
@ Model.GetEnumDisplayName (Model.wheteverEnum)
Không typeof
, không T
, không cần phải thêm một tham chiếu đến namespace Enums
trong Xem ...
Có thể?
+1 Rất tốt. Nó đã sử dụng mã gốc cộng với việc triển khai mã của phương pháp mở rộng bao gồm cách gọi nó là – Nope
Đối với c Vì vậy, bạn nên thêm một kiểm tra rằng có bất kỳ 'DisplayAttributes' nào được áp dụng cho giá trị enum và trả về' value.ToString() 'làm mặc định nếu không có bất kỳ giá trị nào. Nếu không, bạn sẽ nhận được 'IndexOutOfRangeException' khi bạn gọi' ((DisplayAttribute) attrs [0]). Tên ' – flipchart
Nếu ai đó cố gắng gọi từ controller: DisplayName ((MyEnum) id); –