MVC复选框&的FormCollection

时间:2013-11-10 16:23:00

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

在大量编辑表单页面上,我显示了大约50个具有一些布尔属性的对象。控制器接收带有编辑页面中所有值的FormCollection。

    public void _EditAll(FormCollection c)
    {
        int i = 0;
        if (ModelState.IsValid)
        {
            var arrId = c.GetValues("channel.ID");
            var arrName = c.GetValues("channel.displayedName");
            var arrCheckbox = c.GetValues("channel.isActive");

            for (i = 0; i < arrId.Count(); i++)
            {
                Channel chan = db.Channels.Find(Convert.ToInt32(arrId[i]));
                chan.displayedName = arrName[i];
                chan.isActive = Convert.ToBoolean(arrCheckbox[i]);
                db.Entry(chan).State = EntityState.Modified;
            }
            db.SaveChanges();
        }
     }

现在,对于复选框,MVC在表单上创建隐藏的输入(否则“false”无法回发)。在控制器中,当收到FormCollection时,这会导致我收到一个说明

的数组
  • 50个ID,
  • 50个名字和..
  • 复选框的值大约为71,

因为隐藏的复选框与可见的复选框具有相同的名称。

处理该问题并获得正确的复选框值是什么好方法?

2 个答案:

答案 0 :(得分:1)

用于编辑具有布尔字段的实体数组的示例。

实体:

public class Entity
{
    public int Id { get; set; }
    public bool State { get; set; }
}

控制器:

public ActionResult Index()
{
    Entity[] model = new Entity[]
        {
            new Entity() {Id = 1, State = true},
            new Entity() {Id = 2, State = false},
            new Entity() {Id = 3, State = true}
        };
    return View(model);
}

[HttpPost]
public ActionResult Index(Entity[] entities)
{
    // here you can see populated model
    throw new NotImplementedException();
}

查看:

@model Entity[]
@{
    using (Html.BeginForm())
    {
        for (int i = 0; i < Model.Count(); i++ )
        {
            @Html.Hidden("entities[" + i + "].Id", Model[i].Id)
            @Html.CheckBox("entities[" + i + "].State", Model[i].State)
        }
        <input type="submit"/>
    }
}

唯一棘手的问题是html元素的命名 关于绑定数组的More info

答案 1 :(得分:0)

我正在转换包含checkbox-values的所有数组:

“false”=&gt; “假”,如果没有“真实”之前