wm_*_*wm_ 7 asp.net asp.net-mvc asp.net-mvc-4 kendo-ui kendo-grid
我在ASP.Net MVC应用程序中使用Kendo网格.如果我有以下网格定义,
@(Html.Kendo().Grid(Model) //Bind the grid to ViewBag.Products
.Name("grid")
.Columns(columns =>
{
columns.Bound(p => p.FullName);
columns.Bound(p => p.MyEnum)
})
.Groupable()
.Pageable()
.Sortable()
.Scrollable(scr => scr.Height(600))
.Filterable()
)
Run Code Online (Sandbox Code Playgroud)
其中一列是Enum.我的枚举定义是:
public enum MyEnum
{
[Display(AutoGenerateField = false, Name = "My enum 1", Description = "My Enum 1")]
EnumOne,
[Display(Name = "My Enum 2")]
EnumTwo
}
Run Code Online (Sandbox Code Playgroud)
如何让每行显示"My Enum 1"或"My Enum 2"?
提前致谢!
小智 6
我最近遇到了这个问题并通过使用解决了它
var someArrayOfValueAndText = new[] {new {
Id = 0, Description = "Foo"
}, new {
Id = 1, Description = "Bar"
}
.Columns(c.ForeignKey(m=> m.MyEnum, someArrayOfValueAndText, "Id","Description"))
Run Code Online (Sandbox Code Playgroud)
而不是.Bound方法
我不久前创建了一个包含一些扩展方法的辅助类:
public static class EnumExtensions
{
public static string GetDisplayName(this Enum enu)
{
var attr = GetDisplayAttribute(enu);
return attr != null ? attr.Name : enu.ToString();
}
public static string GetDescription(this Enum enu)
{
var attr = GetDisplayAttribute(enu);
return attr != null ? attr.Description : enu.ToString();
}
private static DisplayAttribute GetDisplayAttribute(object value)
{
Type type = value.GetType();
if (!type.IsEnum)
{
throw new ArgumentException(string.Format("Type {0} is not an enum", type));
}
// Get the enum field.
var field = type.GetField(value.ToString());
return field == null ? null : field.GetCustomAttribute<DisplayAttribute>();
}
}
Run Code Online (Sandbox Code Playgroud)
Name它包含两种提取属性Description的方法Display。显示名称:
columns.Bound(p => p.MyEnum.GetDisplayName())
Run Code Online (Sandbox Code Playgroud)
并进行描述:
columns.Bound(p => p.MyEnum.GetDescription())
Run Code Online (Sandbox Code Playgroud)
您必须在您的Web.config或您的视图中添加一条 using 语句。
更新
如果您在模型中为其创建一个属性会怎样:
public string MyEnumName
{
get { return MyEnum.GetDisplayName(); }
}
Run Code Online (Sandbox Code Playgroud)
现在您应该能够使用:
columns.Bound(p => p.MyEnumName);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12042 次 |
| 最近记录: |