Lee*_*e D 66 c# asp.net-mvc enums
想象一下,我有一个这样的枚举(仅作为一个例子):
public enum Direction{
Horizontal = 0,
Vertical = 1,
Diagonal = 2
}
Run Code Online (Sandbox Code Playgroud)
我如何编写一个例程来将这些值放入System.Web.Mvc.SelectList中,因为枚举的内容将来会发生变化?我想将每个枚举名称作为选项文本,并将其值作为值文本,如下所示:
<select>
<option value="0">Horizontal</option>
<option value="1">Vertical</option>
<option value="2">Diagonal</option>
</select>
Run Code Online (Sandbox Code Playgroud)
这是迄今为止我能想到的最好的:
public static SelectList GetDirectionSelectList()
{
Array values = Enum.GetValues(typeof(Direction));
List<ListItem> items = new List<ListItem>(values.Length);
foreach (var i in values)
{
items.Add(new ListItem
{
Text = Enum.GetName(typeof(Direction), i),
Value = i.ToString()
});
}
return new SelectList(items);
}
Run Code Online (Sandbox Code Playgroud)
但是,这总是将选项文本呈现为"System.Web.Mvc.ListItem".通过这个调试也告诉我,Enum.GetValues()正在返回'Horizontal,Vertical'等而不是0,1,正如我所期望的那样,这让我想知道Enum.GetName()和Enum之间有什么区别.的GetValue().
Bra*_*don 83
已经有一段时间了,因为我必须这样做,但我认为这应该有效.
var directions = from Direction d in Enum.GetValues(typeof(Direction))
select new { ID = (int)d, Name = d.ToString() };
return new SelectList(directions , "ID", "Name", someSelectedValue);
Run Code Online (Sandbox Code Playgroud)
Fre*_*red 37
ASP.NET MVC 5.1中有一个新功能.
http://www.asp.net/mvc/overview/releases/mvc51-release-notes#Enum
@Html.EnumDropDownListFor(model => model.Direction)
Run Code Online (Sandbox Code Playgroud)
Dan*_*ann 32
这就是我刚刚制作的,我个人觉得它很性感:
public static IEnumerable<SelectListItem> GetEnumSelectList<T>()
{
return (Enum.GetValues(typeof(T)).Cast<T>().Select(
enu => new SelectListItem() { Text = enu.ToString(), Value = enu.ToString() })).ToList();
}
Run Code Online (Sandbox Code Playgroud)
我最终会做一些翻译工作,所以Value = enu.ToString()会调用某个地方的东西.
And*_*are 27
要获取枚举的值,您需要将枚举转换为其基础类型:
Value = ((int)i).ToString();
Run Code Online (Sandbox Code Playgroud)
小智 22
我想做一些与Dann的解决方案非常相似的东西,但是我需要将Value作为int并将文本作为Enum的字符串表示.这就是我想出的:
public static IEnumerable<SelectListItem> GetEnumSelectList<T>()
{
return (Enum.GetValues(typeof(T)).Cast<int>().Select(e => new SelectListItem() { Text = Enum.GetName(typeof(T), e), Value = e.ToString() })).ToList();
}
Run Code Online (Sandbox Code Playgroud)
在ASP.NET Core MVC中,这是使用标记帮助程序完成的.
<select asp-items="Html.GetEnumSelectList<Direction>()"></select>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
72217 次 |
| 最近记录: |