【问题标题】:Multiple checkboxes in razor always return falserazor 中的多个复选框总是返回 false
【发布时间】:2017-11-08 22:16:19
【问题描述】:

我遇到了这个问题:Multiple checkboxes in razor (using foreach)

我尝试了它的解决方案。它对我不起作用。所以希望你们能提供帮助。

我的观点:

@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>
}

Messages 是一个消息列表,其中包含:

public string Text { get; set; }
public bool Activated { get; set; }

控制器 POST 方法:

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

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

所以我得到一个 false bool 和一个空字符串。为什么?

【问题讨论】:

  • 你的代码没有意义。您视图中的模型与 POST 方法中的模型不匹配。以及为什么视图中有多个表单 - 用户一次只能提交一个表单。并触发提交单击复选框 id 可怕的做法
  • 让你在一个带有提交按钮的表单中循环,并在 POST 方法中更改模型以匹配视图中的模型(除了将参数的名称更改为除模型中的属性)并允许用户编辑多个项目并在一个操作中发布然后全部返回

标签: asp.net-mvc razor checkboxfor


【解决方案1】:

您可以为此使用以下代码。它会起作用的。

@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);                
}

【讨论】:

  • 你是我今天的英雄。这行得通!注意:BeginForm 可以放入 &lt;table&gt; 和循环中,如果您不使用“For”项。
  • 这会生成无效的 html 并且是解决糟糕设计的糟糕方法
猜你喜欢
  • 2021-08-24
  • 2019-03-13
  • 1970-01-01
  • 2012-02-16
  • 1970-01-01
  • 2020-06-16
  • 2014-10-13
相关资源
最近更新 更多