ASP.NET MVC可变数量的下拉列表

时间:2015-02-17 20:55:20

标签: asp.net-mvc-4

考虑以下问题和可能的答案:ASP.Net MVC Multiple Drop Downs, Single List, Only Allow Unique Selections

忽略大部分细节,我们可以看到我们可以为这样的1米关系实现多个下拉列表:

<%: Html.DropDownListFor(model => model.DropwdownId1,Model.DropdownEntities) %>
<%: Html.DropDownListFor(model => model.DropwdownId2,Model.DropdownEntities) %>
<%: Html.DropDownListFor(model => model.DropwdownId3,Model.DropdownEntities) %>

DropdownId1DropdownId2DropdownId3属性很容易添加到模型中,当且仅当我们确切知道要显示的多少下拉菜单和回发时。 但是,我想实现可变数量的下拉菜单。例如,新的下拉菜单可以通过Javascript动态添加。或者,显示在视图中的下拉数量可能取决于model中的某个变量属性。比如,model.NumberOfDropDowns

我该如何实现?如何编写可以处理可变数量下拉列表的viewmodel和controller动作?

我已经完成了很多关于复杂事情的阅读,比如编辑模板和动态添加表单元素的博客文章,但我真的很难弄清楚如何做到这一点。非常感谢任何帮助

1 个答案:

答案 0 :(得分:5)

下拉输入仍然只有1个提交的表单值,因此它与任何其他可变长度视图模型属性相同:使用List<T>,如下所示:

视图模型

class FooViewModel {
    public List<String> DropDownFields { get; set; }
}

控制器操作

[HttpGet]
ActionResult Index() {

    ViewData["dropDownSource"] = new List<SelectListItem>
              {
                   new SelectListItem
                   {
                        Text = "Test",
                        Value= "1"
                   },
                   new SelectListItem
                   {
                        Text = "Text",
                        Value= "2"
                   }
              };

    return View( new FooViewModel() );
}

[HttpPost]
ActionResult Index(FooViewModel vm) {

    for(int i = 0; i < vm.DropDownFields.Count; i++) {

        // for each dropdown
    }
}

查看(aspx语法)

<% for(int i = 0; i < vm.DropDownFields.Count; i++) { %>
    <%= Html.DropDownListFor( m => m.DropDownFields[i], (IEnumerable<SelectListItem>)ViewData["dropDownSource"] ) %>
<% } %>