我正在使用MVC 5和EF Code First,并且有一个包含bool的View模型:
public bool MyCheckbox { get; set; }
我在我的视图中初始化了这个:
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" />
View上的一个按钮触发了一个Ajax POST到Controller,我想查看复选框值:
bool bValue = Request["MyCheckbox"] == "true";
但是Request["MyCheckbox"]
的值是&#34;是,假&#34;由于name="MyCheckbox"
的额外隐藏字段。
如何使用Request [&#34; ...&#34;]查看控制器中此复选框的值并理解它(是真还是假)?
我在View模型中还有另一个bool成员,我故意在隐藏字段中使用它。在模型中:
bool MyHiddenBool { get; set; }
在Controller Get:
中model.MyHiddenBool = true;
在视图中:
@Html.HiddenFor(x => x.MyHiddenBool)
在Controller中(通过Ajax POST):
bool AnotherBool = Request["MyHiddenBool"] == "true";
但是Request["MyHiddenBool"]
的值是&#34; True&#34;或&#34;错误&#34;而不是&#34; true&#34;和&#34;假&#34;。
什么给出了这种不一致性,如何在我的视图中可靠地看到这两种bool方法的值?
答案 0 :(得分:6)
问题是你如何使用表单请求变量。
在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.
复制这不是一个bug,实际上与Ruby相同的方法 使用Rails和MonoRail。
当您提交带有复选框的表单时,仅在以下情况下发布该值 选中该复选框。所以,如果你不选中复选框,那么 在很多情况下你都不会将任何内容发送到服务器 希望错误发送。由于隐藏输入具有相同的名称 作为复选框,如果未选中该复选框,您仍然会得到一个 'false'发送到服务器。
选中此复选框后,ModelBinder将自动执行 关注从'true,false'中提取'true'