我知道已经有其他关于此的线程。我一直在读它们。这是我所拥有的:
namespace Books.Entities
{
public enum Genre
{
[Display(Name = "Non Fiction")]
NonFiction,
Romance,
Action,
[Display(Name = "Science Fiction")]
ScienceFiction
}
}
模型:
namespace Books.Entities
{
public class Book
{
public int ID { get; set; }
[Required]
[StringLength(255)]
public string Title { get; set; }
public Genre Category { get; set; }
}
}
然后,在一个视图中:
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Title)
</td>
<td>
@Html.DisplayFor(modelItem => item.Category)
</td>
</tr>
我认为框架会自动使用 DisplayName 属性。似乎很奇怪,它没有。但是无所谓。试图通过扩展来克服这个问题(在同一问题的另一个线程中找到了这个)......
using System;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Reflection;
public static class EnumExtensions
{
public static string GetDisplayName(this Enum enumValue)
{
return enumValue.GetType()
.GetMember(enumValue.ToString())
.First()
.GetCustomAttribute<DisplayAttribute>()
.GetName();
}
}
看起来它应该可以工作,但是当我尝试使用它时:
@Html.DisplayFor(modelItem => item.Category.GetDispayName())
我收到此错误:
{"Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions."}