请考虑以下问题和可能的答案:ASP.Net MVC多下降,单一列表,仅允许唯一选择
忽略大部分细节,我们可以看到我们可以实现1米关系的许多下拉列表,如下所示:
<%: Html.DropDownListFor(model => model.DropwdownId1,Model.DropdownEntities) %>
<%: Html.DropDownListFor(model => model.DropwdownId2,Model.DropdownEntities) %>
<%: Html.DropDownListFor(model => model.DropwdownId3,Model.DropdownEntities) %>
Run Code Online (Sandbox Code Playgroud)
DropdownId1,DropdownId2并DropdownId3在性能方便地添加到模型中,当且仅当我们知道我们究竟有多少的下拉列表中会显示和回传.但是,我想实现可变数量的下拉菜单.例如,新的下拉菜单可以通过Javascript动态添加.或者,显示在视图中的下拉数量可能取决于某些变量属性model.说,model.NumberOfDropDowns.
我该如何实现呢?如何编写可以处理可变数量下拉列表的viewmodel和控制器操作?
我已经对复杂的东西进行了很多阅读,比如编辑模板和动态添加表单元素的博客文章,但我真的很难弄清楚如何做到这一点.任何帮助将不胜感激
下拉输入仍然只有1个提交的表单值,因此它与任何其他可变长度视图模型属性相同:使用a List<T>,如下所示:
class FooViewModel {
public List<String> DropDownFields { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
[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
}
}
Run Code Online (Sandbox Code Playgroud)
<% for(int i = 0; i < vm.DropDownFields.Count; i++) { %>
<%= Html.DropDownListFor( m => m.DropDownFields[i], (IEnumerable<SelectListItem>)ViewData["dropDownSource"] ) %>
<% } %>
Run Code Online (Sandbox Code Playgroud)