0

在一个批量编辑表单页面上,我显示了大约 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 在表单上创建隐藏输入(否则“假”无法回发)。在控制器中,当收到 FormCollection 时,这会导致我收到一个 say 数组

  • 50个身份证,
  • 50个名字和..
  • 复选框有 71 个左右的值,

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

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

4

2 回答 2

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 元素命名。有关绑定数组的
更多信息。

于 2013-11-10T17:29:21.513 回答
0

我正在转换所有包含复选框值的数组:

"false" => "false",如果前面没有 "true"

于 2013-11-10T17:07:16.333 回答