2016-01-23 72 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并正确填充它即可。一切正常! :)