我有一个包含多个列表项的无序列表,其中每个列表项都有一个复选框和一个下拉列表。
我想获得与所选复选框对应的每个下拉列表的选定下拉值。
我可以通过控制器参数 int []复选框轻松查看已检查的复选框。这给出了检查的每个复选框的值。
现在,我如何获得这些选中复选框旁边的下拉列表的选定值。
我是否必须使用javascript来捕获所选值并将其传递给控制器?
答案 0 :(得分: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
}