首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无论选择了什么,Html.DropDownListFor始终返回值“0”

无论选择了什么,Html.DropDownListFor始终返回值“0”
EN

Stack Overflow用户
提问于 2012-04-24 14:51:41
回答 2查看 897关注 0票数 1

我试图使用Html.DropDownListFor绑定一个枚举控制器,但是不管我从视图页面中选择什么,AgeRange都会得到一个值'0‘。有人能帮我解决这个问题吗?

编辑:控制器代码就位。

枚举类:

代码语言:javascript
复制
public enum AgeRange
{
  Unknown = -1,    
  [Description("< 3 days")]
  AgeLessThan3Days = 1,    
  [Description("3-6 days")]
  AgeBetween3And6 = 2,    
  [Description("6-9 days")]
  AgeBetween6And9 = 3,    
  [Description("> 9 days")]
  AgeGreaterThan9Days = 4
}

查看:

代码语言:javascript
复制
@Html.DropDownListFor(
      model => model.Filter.AgeRangeId,
      @Html.GetEnumDescriptions(typeof(AgeRange)),
      new { @class = "search-dropdown", name = "ageRangeId" }
)

控制器:

代码语言:javascript
复制
public ActionResult Search(int? ageRangeId)
{
   var filter = new CaseFilter { AgeRangeId = (AgeRange)(ageRangeId ?? 0) };
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-24 15:22:50

你很接近了..。

我建议跟随this guy的脚步

票数 1
EN

Stack Overflow用户

发布于 2012-04-24 15:23:58

你必须为你的selectlist编写一个扩展方法来工作。

我用这个

代码语言:javascript
复制
public static SelectList ToSelectList<TEnum>(this TEnum enumeration) where TEnum : struct
{
  //You can not use a type constraints on special class Enum.
  if (!typeof(TEnum).IsEnum)
    throw new ArgumentException("TEnum must be of type System.Enum");
  var source = Enum.GetValues(typeof(TEnum));
  var items = new Dictionary<object, string>();
  foreach (var value in source)
  {
    FieldInfo field = value.GetType().GetField(value.ToString());
    DisplayAttribute attrs = (DisplayAttribute)field.GetCustomAttributes(typeof(DisplayAttribute), false).First();
    items.Add(value, attrs.GetName());
  }
  return new SelectList(items, Constants.PropertyKey, Constants.PropertyValue, enumeration);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10293048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档