使用ASPNET MVC 4,说我有一个枚举
public enum IndicatorGroup
{
Include_ANY_MatchingIndicator = 1,
Include_ALL_MatchingIndicator = 2,
Exclude_ANY_MatchingIndicator = 3,
Exclude_ALL_MatchingIndicator = 4
};
我使用以下帮助器方法将其绑定到下拉列表,如下所述:How do you create a dropdownlist from an enum in ASP.NET MVC?
public static class MyExtensions{
public static SelectList ToSelectList<TEnum>(this TEnum enumObj)
where TEnum : struct, IComparable, IFormattable, IConvertible
{
var values = from TEnum e in Enum.GetValues(typeof(TEnum))
select new { Id = e, Name = e.ToString() };
return new SelectList(values, "Id", "Name", enumObj);
}
}
现在我希望所选的值是一个数字(这可能在上面的代码中指定为)
Id = e ,
但是当我得到所选的值时,它会返回文本Exclude_ALL_MatchingIndicator而不是数字4.如何正确设置?
查看
@Html.DropDownListFor(m => m.IndicatorGroups, Model.IndicatorGroups.ToSelectList(), new { @id = "ddlIndicatorGroup" })
答案 0 :(得分:1)
您可以使用Convert.ToInt32(e)
,以便代码
var values = from TEnum e in Enum.GetValues(typeof(TEnum))
select new { Id = Convert.ToInt32(e), Name = e.ToString() };
return new SelectList(values, "Id", "Name", Convert.ToInt32(enumObj));
但是,你真的不想这样做。如果属性IndicatorGroups
的值为IndicatorGroup.Exclude_ANY_MatchingIndicator
,则您的DropDownListFor()
方法最初会显示第一个选项,因为该属性的值与任何选项值都不匹配。在内部,该方法基于第二个参数构建新的IEnumerable<SelectListItem>
,并且如果属性的Selected
值与任何{.ToString()
属性匹配,则设置Value
属性。 1}} - 在您的情况下,SelectListItem
将与"Exclude_ANY_MatchingIndicator"
,1
,2
或3
不匹配,因此将选择第一个选项(因为是)。
您已在评论中指出要将所选值保存为数据库中的4
,在这种情况下,在POST方法中,将绑定值转换为INT
。假设您在视图中选择第二个选项,那么模型的int
属性将为IndicatorGroups
。要将值保存为IndicatorGroup.Include_ALL_MatchingIndicator
,请使用
int