MVC下拉列表值未设置

时间:2009-05-05 01:46:58

标签: asp.net-mvc

我确定我错过了一些明显的东西,但这让我疯了!如果我指定html选项,则我的下拉列表的值不会设置。

在我的控制器中,我使用以下命令检索下拉列表的选项:

ViewData["Coordinator"] = new SelectList(userRepository.GetIdUserList(1), 
                          "ID",    "Signature",edCenter.Coordinator);

在我看来,我用以下内容填充下拉列表:

Html.DropDownList("Coordinator",(IEnumerable) ViewData["Coordinator"],
                   new {style="width:175px"})

下拉值完全填充,但未选择列表的值。

但是,如果我只是使用:

Html.DropDownList("Coordinator");

一切正常。

出了什么问题?

2 个答案:

答案 0 :(得分:4)

昨天我遇到了类似问题,所以如果你仍然得到同样的结果,还有一件事需要考虑。 DropDownList有时会忽略SelectList的选定值,这很烦人,但它的作用是尝试通过使用字段名作为键从ModelState,ViewData和Model中获取所选值。 在您的情况下,您将列表存储在ViewData [“Coordinator”]中,该键与DropDown具有相同的名称。试试这个:

ViewData["CoordinatorList"] = new SelectList(userRepository.GetIdUserList(1), 
                          "ID",    "Signature",edCenter.Coordinator);

ViewData["Coordinator"] = dCenter.Coordinator;

然后在视图中:

    <%=Html.DropDownList("Coordinator",((SelectList)ViewData["CoordinatorList"]).AsEnumerable(),
 new {style="width:175px"}) %>

如果你想看看窗帘后面发生了什么,打开反射器(或获取MVC源)并浏览此方法: System.Web.Mvc.Html.SelectExtensions.SelectInternal()

答案 1 :(得分:1)

DropDown Helper的第二个参数接受一个I​​Enumerable类型的对象(Of SelectListItem),但是你传递了一个IEnumerable类型的对象(Of SelectList) 所以这个代码应该如何编写:

     <%=Html.DropDownList("Coordinator",((SelectList)ViewData["Coordinator"]).AsEnumerable(),
 new {style="width:175px"}) %>