2012-01-17 50 views
0

我有一个模型,它有一组用户。我正在循环这个集合来生成一个用户表。表格中的一个选项是更改用户角色,这是用户对象的枚举属性。目前,我有以下代码:在ASP.NET MVC3中设置嵌套窗体的选定值

@foreach (var user in Model.Users) 
{ 
    <tr> 
     ... 
     <td> 
      <form action="@Url.Action("UpdateRole", "Admin", new { id = user.Id })" class="inline"> 
       @Html.DropDownList("Role", Model.GetRoles()) 
      </form>      
     </td> 
     ... 
    </tr> 
} 

这段代码的问题是,所产生的下拉列表是不知道的用户对象的财产的实际价值。但是,我看不到DropDownList方法会接受用于所选值的值。 DropDownListFor方法的确如此,但它似乎直接在模型上运行,我无法想出一种将嵌套用户对象的类型传递给它的方法。这可以做到吗?

回答

1

您可以使用SelectList [1]具有选定值的覆盖,例如:

@Html.DropDownList("Role", new SelectList(Model.GetRoles(), "selectedValueHere")) 
+0

+1后立即调用该方法,该方法应该这样做 – smartcaveman 2012-01-17 09:21:12

+0

这正是我所期待的。谢谢! – Chris 2012-01-17 09:26:11

0

您可以创建一个自定义DropDownList HtmlHelper扩展方法,其中包含您需要的选项。

+0

创建这样的事情正确的HTML帮助是不平凡的,而且我希望能避免它。在最坏的情况下,我将foreach循环的全部内容移动到局部视图并以此方式进行渲染。我希望有一个简单的方法可以在我这样做之前将正确的值填充到现有的帮助程序方法中。 – Chris 2012-01-17 09:03:04

+0

如果您使用Reflector并查看'System.Web.Mvc.Html.SelectExtensions',它实际上是非常微不足道的。另一个解决方案(虽然有点不好),将创建一个扩展方法,用jQuery进行客户端绑定,并在声明下拉菜单 – smartcaveman 2012-01-17 09:20:26