2016-01-23 76 views
0

在我的ViewModel我有兩個領域:ASP.NET MVC 4 - 下拉選擇的值不起作用

public AdTypeEnum Type { get; set; } 
public IList<SelectListItem> TypeEnumList { get; set; } 

這就是我如何填充列表:

public void SetLists() 
{ 
    TypeEnumList = new List<SelectListItem>(); 
    TypeEnumList.Add(new SelectListItem { Value = "0", Text = "Select the type"}); 

    foreach (var en in Enum.GetValues(typeof(AdTypeEnum)).Cast<AdTypeEnum>()) 
    { 
     TypeEnumList.Add(new SelectListItem 
     { 
      Value = ((int)en).ToString(), 
      Text = en.ToString(), 
      Selected = Type == (AdTypeEnum)en ? true : false 
     }); 
    } 
} 

然後我只是呈現一個下拉我的觀點:

@Html.DropDownListFor(x => x.Type, Model.TypeEnumList, new { @class = "form-control" }) 

但選定值不渲染和第一個選項總是選擇。當我檢查HTML中的選擇時,我發現沒有任何一個選項具有selected屬性,但是當我調試我的控制器方法時,我可以看到總是有一個selectListItem有propety Selected = true。爲什麼當我的視圖呈現時它突然消失?

+0

您可以嘗試添加默認值:http://stackoverflow.com/questions/7229626/dropdownlistfor-default-value – jjh121

+0

您的意思是?我正確地填充List ,總是其中一個元素得到了Selected = true,但神奇的是,視圖上沒有任何選項具有選定的屬性:/那就是我想弄清楚的 – CSharpBeginner

+0

您沒有正確填充'SelectList'。不要添加第一個選項(使用'value =「0」)) - 使用正確的重載添加標籤選項 - 「@ Html.DropDownListFor(x => x.Type,Model.TypeEnumList」)選擇類型「 ,new {..})''生成了一個'null'值,並且在循環中它應該是'Value = en.ToString(),'最後,設置'SelectListItem'的'Selected'屬性是毫無意義的綁定到一個屬性,它的'Type'的值決定了哪個選項被選中('Selected'屬性被'DropDownListFor()'方法忽略 –

回答

0

好的,我已經找到了結果。我只需將Type from Enum更改爲int並正確填充它即可。一切正常! :)