Asp.net mvc razor中的多个复选框始终返回false

Asp.net mvc razor中的多个复选框始终返回false,asp.net-mvc,razor,checkboxfor,Asp.net Mvc,Razor,Checkboxfor,我有一个问题: 我尝试了它的解决方案。这对我来说不管用。希望你们能帮忙 我的看法是: @for(int i = 0; i < Model.Messages.Count; i++) { <tr> <td> @using (Html.BeginForm("UpdateMessage", "Home", FormMethod.Post)) { @Html.CheckBo

我有一个问题:

我尝试了它的解决方案。这对我来说不管用。希望你们能帮忙

我的看法是:

@for(int i = 0; i < Model.Messages.Count; i++)
{
    <tr>
        <td>
            @using (Html.BeginForm("UpdateMessage", "Home", FormMethod.Post))
            {
                @Html.CheckBoxFor(x => Model.Messages[i].Activated, new {onchange = "this.form.submit();"});
                @Html.HiddenFor(x => x.Messages[i].Text);
            }
        </td>
        <td>@Model.Messages[i].Text</td>
        <td><button>Delete</button></td>
    </tr>
}
控制员职务方法:

[HttpPost]
public ActionResult UpdateMessage(Domain.Entities.Message message)
{
    repository.UpdateMessage(message);

    return RedirectToAction("Settings_Message", "Home");
}

所以我得到一个假布尔值和一个空字符串。为什么?

您可以使用以下代码进行此操作。它会起作用的

@using (Html.BeginForm("UpdateMessage", "Home", FormMethod.Post))
{
     @Html.CheckBox("Activated", Model.Messages[i].Activated, new { onchange = "this.form.submit();" });
     @Html.Hidden("Text", Model.Messages[i].Text);                
}

你是我今天的英雄。这管用!注意:如果不使用“For”项,
BeginForm
可以放入一个
和一个循环中。这会生成无效的html,这是解决糟糕设计的糟糕方法。您编写的代码毫无意义。视图中的模型与POST方法中的模型不匹配。为什么视图中有多个表单?用户一次只能提交一个表单。要触发提交,请单击使用复选框id可怕的做法,但您可以使用提交按钮在单个表单中循环,并在POST方法中更改模型以匹配视图中的模型(将参数名称更改为模型中属性名称以外的任何名称除外)并允许用户编辑多个项目,然后在一个操作中发布所有项目
@using (Html.BeginForm("UpdateMessage", "Home", FormMethod.Post))
{
     @Html.CheckBox("Activated", Model.Messages[i].Activated, new { onchange = "this.form.submit();" });
     @Html.Hidden("Text", Model.Messages[i].Text);                
}