【问题标题】:ASP.Net MVC - How to get collection of dropdownlists in controller with selected valuesASP.Net MVC - 如何在控制器中获取具有选定值的下拉列表集合
【发布时间】:2013-04-16 18:24:43
【问题描述】:

我有一个包含多个列表项的无序列表,其中每个列表项都有一个复选框和一个下拉列表。

我想获取与选中的复选框相对应的每个下拉列表的选定下拉值。

我可以通过控制器参数 int[] checkboxes 轻松获得选中的复选框。这给出了每个被选中的复选框的值。

现在,我如何获取这些选中复选框旁边的下拉列表的选定值。

我是否必须使用 javascript 来捕获选定的值并将其传递给控制器​​?

【问题讨论】:

    标签: asp.net-mvc-4


    【解决方案1】:

    您需要在控制器中使用比 int[] 更复杂的模型:

    public class CheckedListModel
    {
        public bool IsChecked { get; set; }
    
        public int SelectedValue { get; set; }
    
        public SelectList Items { get; set; }
    }
    

    呈现此类模型列表的示例视图:

    @model CheckedListModel[]
    
    @using (Html.BeginForm())
    {
        <ul>
            @for (int i = 0; i < Model.Length; i++)
            {
                <li>
                    @Html.CheckBoxFor(m => m[i].IsChecked)
                    @Html.DropDownListFor(m => m[i].SelectedValue, Model[i].Items)
                </li>
            }
        </ul>
        <input type="submit" value="Save"/>
    }
    

    还有控制器:

        [HttpGet]
        public ActionResult Index()
        {
            return View(new CheckedListModel[]
                {
                    //Sample data
                    new CheckedListModel{Items = new SelectList(new []
                        {
                            new SelectListItem{Text = "Text 1", Value="1"},
                            new SelectListItem{Text = "Text 2", Value="2"},
                            new SelectListItem{Text = "Text 3", Value="3"},
                        }, "Value", "Text")},
                    new CheckedListModel{Items = new SelectList(new []
                        {
                            new SelectListItem{Text = "Text 5", Value="5"},
                            new SelectListItem{Text = "Text 6", Value="6"},
                        }, "Value", "Text")},
                });
        }
    
        [HttpPost]
        public ActionResult Index(CheckedListModel[] models)
        {
            IEnumerable<CheckedListModel> checkedItems = models.Where(m => m.IsChecked);
            //Rest of the code
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多