我在构建一个包含复选框列表的表单时使用了CheckboxFor:
<div id="TestSections">
@foreach (var item in Model)
{
<div class="form-group">
<label class="col-md-2 control-label">
@if (item.IsRequried)
{
<text>Required - </text>
}
@item.Name
</label>
<div class="md-checkbox-list col-md-10">
<div>
@Html.CheckBoxFor(i => item.IsChecked)
</div>
</div>
</div>
}
</div>
传递的模型是:
public class TestModel
{
public int TestId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public bool IsRequired { get; set; }
// used for checkbox
public bool IsChecked { get; set; }
}
该视图构建了正确的复选框,但在表单发回时我无法获取它们:
[HttpPost]
public ActionResult TestSection(int id, List<TestModel> model)
{
return View();
}
模型始终为空。
答案 0 :(得分:3)
这是因为你使用foreach作为List模型。 尝试重写如下:
for(int i=0;i<Model.Count;++i)
{
@Html.CheckBoxFor(model => model[i].IsChecked)
}
答案 1 :(得分:3)
我有一段相似的问题。从列表中显示项目的方式与通常的方式略有不同。您现在将拥有for loop
并使用索引变量访问列表中的每个项目。需要索引,以便您可以跟踪哪个复选框设置为true,哪个是false。
在您的视图中,您可以使用以下代码:
@model List<TestModel>
@using (Html.BeginForm())
{
@for (int i = 0; i < Model.Count; i++)
{
<div>@Html.CheckBoxFor(m => m[i].IsChecked)</div>
}
}
我试图像你那样改变它,但是没有测试过它:
<div id="TestSections">
@for (int i = 0; i < Model.Count; i++)
{
<div class="form-group">
<label class="col-md-2 control-label">
@if (item.IsRequried)
{
<text>Required - </text>
}
@item.Name
</label>
<div class="md-checkbox-list col-md-10">
<div>
@Html.CheckBoxFor(i => i[i].IsChecked)
</div>
</div>
</div>
}
</div>
在您的控制器中,您的操作方法将如下所示:
public ActionResult TestSection(int id)
{
List<TestModel> models = new List<TestModel>();
// Populate your list and send it to the view
return View(models);
}
[HttpPost]
public ActionResult TestSection(int id, List<TestModel> model)
{
// Do what ever you need to do
return View();
}
我希望这会有所帮助。
答案 2 :(得分:0)
模型列表绑定
int i =0;
@foreach (var item in Model)
{
@Html.CheckBox("myModel["+i+"].IsChecked",item.IsChecked)
i++;
}