Asp.net mvc 4 ASP.NET MVC下拉列表的可变数量

Asp.net mvc 4 ASP.NET MVC下拉列表的可变数量,asp.net-mvc-4,Asp.net Mvc 4,考虑以下问题和可能的答案: 忽略大部分细节,我们可以看到我们可以为1-m关系实现许多下拉列表,如下所示: <%: Html.DropDownListFor(model => model.DropwdownId1,Model.DropdownEntities) %> <%: Html.DropDownListFor(model => model.DropwdownId2,Model.DropdownEntities) %> <%: Html.DropDow

考虑以下问题和可能的答案:

忽略大部分细节,我们可以看到我们可以为1-m关系实现许多下拉列表,如下所示:

<%: Html.DropDownListFor(model => model.DropwdownId1,Model.DropdownEntities) %>
<%: Html.DropDownListFor(model => model.DropwdownId2,Model.DropdownEntities) %>
<%: Html.DropDownListFor(model => model.DropwdownId3,Model.DropdownEntities) %>
model.DropwdownId1,model.DropdownEntities)%>
model.DropwdownId2,model.DropdownEntities)%>
model.DropwdownId3,model.DropdownEntities)%>
DropdownId1
DropdownId2
DropdownId3
是可以轻松添加到模型中的属性,前提是我们确切知道要显示和回发多少个下拉列表。 但是,我希望实现数量可变的下拉列表。例如,可以通过Javascript动态添加新的下拉列表。或者,视图中显示的下拉列表的数量可能取决于
模型中的某些变量属性。比如说,
model.NumberOfDropDowns

我如何实现这一点?如何编写一个viewmodel和控制器操作来处理数量可变的下拉列表


我读过很多复杂的东西,比如编辑器模板和博客文章,其中表单元素是动态添加的,但我真的很难弄清楚如何做到这一点。任何帮助都将不胜感激

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

视图模型
class-FooViewModel{
公共列表下拉字段{get;set;}
}
控制器动作
[HttpGet]
ActionResult索引(){
ViewData[“dropDownSource”]=新列表
{
新建SelectListItem
{
Text=“测试”,
Value=“1”
},
新建SelectListItem
{
Text=“Text”,
Value=“2”
}
};
返回视图(新的FooViewModel());
}
[HttpPost]
ActionResult索引(FooViewModel虚拟机){
for(int i=0;i
视图(aspx语法)

m、 DropDownFields[i],(IEnumerable)ViewData[“dropDownSource”])%>

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

视图模型
class-FooViewModel{
公共列表下拉字段{get;set;}
}
控制器动作
[HttpGet]
ActionResult索引(){
ViewData[“dropDownSource”]=新列表
{
新建SelectListItem
{
Text=“测试”,
Value=“1”
},
新建SelectListItem
{
Text=“Text”,
Value=“2”
}
};
返回视图(新的FooViewModel());
}
[HttpPost]
ActionResult索引(FooViewModel虚拟机){
for(int i=0;i
视图(aspx语法)

m、 DropDownFields[i],(IEnumerable)ViewData[“dropDownSource”])%>

您的问题是如何使用JavaScript动态添加下拉列表?不,我的问题是如何实现视图模型和回发控制器来处理数量可变的下拉列表。这就是为什么我还提供了一个例子,我们使用model.NumberOfDropDowns来决定视图中创建了多少个下拉列表;好啊好消息是我们在ASP.NETMVC中没有回发,所以您不必担心这一点。由于您的问题将多个值绑定到一个控制器操作,因此如果您可以编辑您的问题以澄清这一点,这将有所帮助。这将需要自定义实现。完成这项任务有很多方法。@TravisJ,你能详细说明一下这些方法吗?我不希望有一个完整的教程,但我应该在谷歌上搜索的一个解释可以帮助你解决如何使用JavaScript动态添加下拉列表的问题?不,我的问题是如何实现视图模型和回发控制器来处理数量可变的下拉列表。这就是为什么我还提供了一个例子,我们使用model.NumberOfDropDowns来决定视图中创建了多少个下拉列表;好啊好消息是我们在ASP.NETMVC中没有回发,所以您不必担心这一点。由于您的问题将多个值绑定到一个控制器操作,因此如果您可以编辑您的问题以澄清这一点,这将有所帮助。这将需要自定义实现。完成这项任务有很多方法。@TravisJ,你能详细说明一下这些方法吗?我不希望有一个完整的教程,但一个关于我应该在谷歌上搜索什么的解释可能会有所帮助
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
    }
}
<% for(int i = 0; i < vm.DropDownFields.Count; i++) { %>
    <%= Html.DropDownListFor( m => m.DropDownFields[i], (IEnumerable<SelectListItem>)ViewData["dropDownSource"] ) %>
<% } %>