1.EnumManage.cs新建枚举类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel;
using System.Reflection;
using System.Web.Mvc;
namespace Manage.Extension
{
//枚举
public enum TableStatus
{
[EnumDisplayName("空台桌")]
EmptyTable = 1,
[EnumDisplayName("已出单")]
Single = 2,
[EnumDisplayName("未出单")]
NoSingle = 3,
[EnumDisplayName("预定台")]
Schedule = 4,
[EnumDisplayName("呼叫")]
Call = 5,
[EnumDisplayName("加菜")]
AddDish = 6,
[EnumDisplayName("下单")]
Down = 7,
[EnumDisplayName("结账")]
Checkout = 8,
}
public class EnumDisplayNameAttribute : Attribute
{
private string _displayName;
public EnumDisplayNameAttribute(string displayName)
{
this._displayName = displayName;
}
public string DisplayName
{
get { return _displayName; }
}
}
public class EnumExt
{
/// <summary>
/// 根据枚举成员获取自定义属性EnumDisplayNameAttribute的属性DisplayName
/// </summary>
/// <param name="e"></param>
/// <returns></returns>
public static string GetEnumCustomDescription(object e)
{
//获取枚举的Type类型对象
Type t = e.GetType();
//获取枚举的所有字段
FieldInfo[] ms = t.GetFields();
//遍历所有枚举的所有字段
foreach (FieldInfo f in ms)
{
if (f.Name != e.ToString())
{
continue;
}
//第二个参数true表示查找EnumDisplayNameAttribute的继承链
if (f.IsDefined(typeof(EnumDisplayNameAttribute), true))
{
return
(f.GetCustomAttributes(typeof(EnumDisplayNameAttribute), true)[0] as EnumDisplayNameAttribute).DisplayName;
}
}
//如果没有找到自定义属性,直接返回属性项的名称
return e.ToString();
}
/// <summary>
/// 根据枚举,把枚举自定义特性EnumDisplayNameAttribut的Display属性值装到SelectListItem中
/// </summary>
/// <param name="enumType">枚举</param>
/// <returns></returns>
public static List<SelectListItem> GetSelectList(Type enumType)
{
List<SelectListItem> selectList = new List<SelectListItem>();
foreach (object e in Enum.GetValues(enumType))
{
selectList.Add(new SelectListItem() { Text = GetEnumCustomDescription(e).ToString(), Value = ((int)e).ToString() });
}
return selectList;
}
}
}
2.新建辅助方法类EnumHtml.cs( @Html.DropDownListFor(model => model.TableStatus, (List<SelectListItem>)ViewData["date"]) )
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel;
using System.Reflection;
using Manage.Extension;
namespace System.Web.Mvc
{
public static class EnumHtml
{
//显示Enum类型的Name字段
public static MvcHtmlString DisplayEnumName(this HtmlHelper htmlHelper, string enumTypeName, int value)
{
//"Manage.Extension." EnumManage.cs的命名空间
Type enumType = Type.GetType("Manage.Extension." + enumTypeName);
if (!Enum.IsDefined(enumType, value))
{
return MvcHtmlString.Empty;
}
EnumDisplayNameAttribute[] EnumAttributes = (EnumDisplayNameAttribute[])(enumType.GetField(Enum.GetName(enumType, value))).GetCustomAttributes(typeof(EnumDisplayNameAttribute), false);
if (EnumAttributes.Length > 0)
{
return MvcHtmlString.Create(EnumAttributes[0].DisplayName);
}
//如果只是要简单的返回枚举的Name值就只要这一行了
return MvcHtmlString.Create(Enum.GetName(enumType, value));
}
}
}
3.后台
public ActionResult Edit(int id = 0)
{
Table table = db.Tables.Find(id);
if (table == null)
{
return HttpNotFound();
}
ViewData["date"] = Manage.Extension.EnumExt.GetSelectList(typeof(TableStatus));
return View(table);
}
4.view视图
index:
@Html.DisplayEnumName("TableStatus",item.TableStatus.Value)
edit:
@Html.DropDownListFor(model => model.TableStatus, (List<SelectListItem>)ViewData["date"])
5.完毕