Html.DropDownListFor总是返回值'0',无论选择什么

时间:2012-04-24 06:51:41

标签: asp.net-mvc-3 razor drop-down-menu html.dropdownlistfor

我正在尝试使用AgeRange绑定枚举Html.DropDownListFor,但无论我在View页面中选择什么,Controller都会得到值“0”。任何人都可以帮我解决这个问题吗?

编辑:控制器代码到位。

枚举类:

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
}

查看:

@Html.DropDownListFor(
      model => model.Filter.AgeRangeId,
      @Html.GetEnumDescriptions(typeof(AgeRange)),
      new { @class = "search-dropdown", name = "ageRangeId" }
)

控制器:

public ActionResult Search(int? ageRangeId)
{
   var filter = new CaseFilter { AgeRangeId = (AgeRange)(ageRangeId ?? 0) };
}

2 个答案:

答案 0 :(得分:1)

你很亲密......

我建议跟随this guy

答案 1 :(得分:1)

您必须为选择列表编写扩展方法才能工作。

我用这个

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);
}