Asp.net Mvc Enum 扩展

消失月余,担心文笔生疏,今作简单一篇小文试手。

 

一直以来都觉得enum、struct以及class是编程的基础结构。

我们通常意图用枚举来表示一些名称的值属性。有的时候用Enum来填充DropDownList也算是不错的选择。

假设我们有一个enum:

public enum Role{
User = 0,
Admin = 1024
}

我们想要实现如此效果:

image

 

因为enum本身并没有IEnumerable接口,所以不能直接使用new SelectList(Role);来将之填充DropDownList。

但是我们可以写一个静态方法将之转为IEnumerable。

public class EnumExt{
	static public List<ListItem> ToListItem<T>(){
		List<ListItem> li = new List<ListItem>();
		foreach (int s in Enum.GetValues(typeof(T))){
			li.Add(new ListItem{
				Value = s.ToString(),
				Text = Enum.GetName(typeof (T), s)
			}
			);
		}
		return li;
	}
}

View文件中我们加入以下helper:

    <%=Html.DropDownList("enumlist") %>

然后我们在Controller的action中写如下绑定即可

        public ActionResult Index()
{
ViewData["enumlist"] = new SelectList(EnumExt.ToListItem<Role>(),"value","text");
return View();
}
这样我们就可以实现将Enum绑定在DropDownList了
标签: Asp.net MVC, enum
posted @ 2008-11-12 09:47 重典 阅读(1335) 评论(4) 编辑 收藏

 回复 引用   
#1楼2008-11-18 17:18 | 智者[未注册用户]
正在研究这种方法没想到你先出来了!呵呵
 回复 引用 查看   
#2楼2011-01-24 17:49 | 一线风      
这个是枚举的名。如果中文的就比较麻烦了。
 回复 引用 查看   
#3楼[楼主]2011-01-24 17:57 | 重典      
@一线风
其实中文的话完全可以加Attribute
[Descrioption("管理员")]
Admin =1024

只是改一下获取方法 就OK了

 回复 引用 查看   
#4楼2011-01-25 13:43 | ice_点点      
师父啊…… 好久没见到你了,还以为您老人家云游去了呢。
你写的这个东西太有用了,可惜我看不太懂。