MVC4获取控制器中的复选框列表

时间:2013-12-03 21:43:29

标签: c# asp.net asp.net-mvc-4

我使用以下代码在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。有没有办法获得名称/价值对?

由于

1 个答案:

答案 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