【问题标题】:MVC @Html.CheckboxFor submits true,false on form submissionMVC @Html.CheckboxFor 在表单提交时提交 true,false
【发布时间】:2014-08-28 23:00:51
【问题描述】:

我正在使用带有 EF Code First 的 MVC 5,并且有一个包含 bool 的 View 模型:

public bool MyCheckbox { get; set; }

我在 View 的 get 中初始化它:

model.MyCheckbox = true;

在视图中:

@Html.CheckBoxFor(m => m.MyCheckbox)

渲染为:

<input checked="checked" data-val="true" data-val-required="The field is required." id="MyCheckbox" name="MyCheckbox" type="checkbox" value="true" />
<input name="MyCheckbox" type="hidden" value="false" />

我在视图上的一个按钮触发了一个 Ajax POST 到我想查看复选框值的控制器:

bool bValue = Request["MyCheckbox"] == "true";

但是Request["MyCheckbox"] 的值是“true,false”,因为name="MyCheckbox" 有额外的隐藏字段。

如何使用 Request["..."] 在控制器中查看此复选框的值并理解它(真或假)?

我在 View 模型中还有另一个 bool 成员,我有意在隐藏字段中使用它。在模型中:

bool MyHiddenBool { get; set; }

在控制器中获取:

model.MyHiddenBool = true;

在视图中:

@Html.HiddenFor(x => x.MyHiddenBool)

在控制器中(通过 Ajax POST):

bool AnotherBool = Request["MyHiddenBool"] == "true";

但是Request["MyHiddenBool"] 的值不是“true”和“false”而是“True”或“False”。

导致这种不一致的原因是什么?如何在我的视图中可靠地查看这两种 bool 方法的值?

【问题讨论】:

  • 您发布了一个很好的问题,实际上我也遇到了同样的问题,我想在数据库中将状态保存为真/假。我搜索了几乎所有内容,但没有什么与我有太大关系。您能否提供有关您使用的 ViewModel 概念的详细说明。

标签: asp.net-mvc


【解决方案1】:

问题在于您如何使用表单请求变量。

在 ASP.NET MVC 中,使用 Request.Form 或它的变体来使用您的请求数据可能永远没有充分的理由。您需要为该操作创建一个模型或输入一个参数。

[HttpPost]
public ActionResult PostedForm(bool myHiddenBool)
{
  //Frameworks model binder will extract the form field into your variable based on the name
}

以下复制自this answer.

这不是错误,实际上是 Ruby 上的相同方法 Rails 和 MonoRail 的使用。

当您提交带有复选框的表单时,仅在以下情况下才会发布该值 复选框被选中。因此,如果您未选中该复选框,则 在许多情况下,您不会向服务器发送任何内容 希望改为发送 false 。由于隐藏的输入具有相同的名称 作为复选框,那么如果未选中该复选框,您仍然会得到一个 'false' 发送到服务器。

勾选复选框时,ModelBinder会自动取 关心从“真,假”中提取“真”

【讨论】:

  • 谢谢。我更改了我的控制器以使用视图模型,即使我只需要帖子中的一些参数。为什么 MVC 从 HiddenFor 布尔值返回“True”,从 CheckboxFor 返回“true”,这仍然没有意义。谢谢你的回答。该链接很有帮助。
  • @rwkiii,因为HiddenFor() 使用,ToString() 生成输入值,而.ToString() 用于布尔值返回“True”或“False”。
猜你喜欢
  • 2011-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-02
  • 2015-05-07
  • 2012-03-22
  • 2011-05-12
相关资源
最近更新 更多