我使用以下代码在View中生成了一个复选框列表:
using (Html.BeginForm("UpdateItems", "Home", FormMethod.Post)) {
foreach (myProject.Models.item t in ViewBag.Items)
{
<div>
@Html.CheckBox("chkT", t.selected, new { id = "chkT" + t.id })
@Html.Label(t.description)
</div>
}
<button type="submit" class="mfButton" value="SaveItemss">Save Changes</button>
}
我需要的是能够在控制器中获取这些生成的复选框的值。到目前为止,我有以下内容:
public ActionResult UpdateItemss(List<bool> chkT)
{
return View();
}
然而,这是一个布尔值只给我true或false以及它们所属的值的id。有没有办法获得名称/价值对?
由于
答案 0 :(得分:3)
我会使用强类型视图,而不是使用ViewBag。我会创建一个模型并将列表添加为属性。我的模型看起来像:
public class Test
{
public int Id { get; set; }
public List<Item> Items { get; set; }
}
public class Item
{
public int Id { get; set; }
public bool Selected { get; set; }
public string Description { get; set; }
}
在控制器中,我使用虚拟数据传递模型:
public ActionResult Index()
{
Test model = new Test()
{
Id = 1,
Items = new List<Item>()
{
new Item {Id = 1, Selected = false, Description = "Item1"},
new Item {Id = 2, Selected = false, Description = "Item2"},
new Item {Id = 3, Selected = false, Description = "Item3"}
}
};
return View(model);
}
在我的视图中,我使用for循环生成项目列表:
@model MVCTest.Models.Test
@using (Html.BeginForm("UpdateItems", "Home", FormMethod.Post)) {
@Html.HiddenFor(m=>m.Id)
for (int i = 0; i < Model.Items.Count; i++)
{
<div>
@Html.HiddenFor(m=>m.Items[i].Id)
@Html.CheckBoxFor(m=>m.Items[i].Selected, new {id = "checkbox_" + i} )
@Html.DisplayFor(m=>m.Items[i].Description)
</div>
}
<button type="submit" class="mfButton" value="SaveItemss">Save Changes</button>
}
在控制器中,我正在捕捉已发布的模型,并在其Items属性中找到所有项目:
[HttpPost]
public ActionResult UpdateItems(Test model)
{
if (model != null)
{
// You can access model.Items here
//Do whatever you need
}
return View(model);
}
我建议您阅读此博客:ASP.NET Wire Format for Model Binding to Arrays, Lists, Collections, Dictionaries。