2012-04-24 75 views
1

我試圖綁定枚舉AgeRange使用Html.DropDownListFor但無論我從視圖頁面中選擇的任何東西,控制器獲得值'0'。任何人都可以幫我解決這個問題嗎?Html.DropDownListFor總是返回值'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) }; 
} 
+0

我建議你需要一個右括號所以我編輯 – 2012-04-24 07:09:50

回答

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