【发布时间】:2019-03-12 01:41:56
【问题描述】:
我知道有很多人遇到过这个问题,但我觉得他们从来没有解决过这个问题。
我有一个这样的剃须刀页面:
@model MyModel
<div>
@using (Html.BeginForm("MyMethod", "Home", FormMethod.Get))
{
@Html.CheckBoxFor(model => model.MyBool)
@Html.LabelFor(model => model.MyBool)
<input type="submit" class="btn" value="Fire it up" />
}
</div>
我的模型如下所示:
public class MyModel
{
[DisplayName("My checkbox")]
public bool MyBool {get; set;}
}
而我在 home 控制器中的方法是这样的:
public IActionResult MyMethod(MyModel model)
{
return View();
}
在我看来一切都很好,但是,无论我是否选中复选框,在我提交表单后,MyMethod 方法中的模型参数总是为 false。
我做错了什么?
编辑:
当我选中复选框时,GET 请求包含两个值 - true 和 false。 我看到有人说 MVC 应该处理它,但它显然没有。
【问题讨论】:
-
您的表单的 GET 请求是否发送了如下内容:
MyBool=true&MyBool=false?这与CheckBoxForhelper 如何生成 HTML 有关:stackoverflow.com/questions/2697299/…。检查model.MyBool内的MyMethod以确认此行为。 -
@TetsuyaYamamoto 是的,GET 请求看起来完全一样。无论复选框状态如何,MyMethod 中的 model.MyBool 值始终为 false。
-
我尝试重现您的问题here,发现请求URL 查询字符串看起来与前面提到的完全一样,但
MyBool属性已正确设置为true。你能提供Core MVC版本来确定吗? -
@TetsuyaYamamoto .NET Core 2.1
-
我在自己的机器上使用了一个测试项目,按照以下步骤操作:选中复选框,提交表单,获取请求查询字符串 (
/Home/MyMethod?MyBool=true&MyBool=false) 并返回相同的视图,复选框仍处于选中状态,如您的问题中所述,未选中。调试器还提到MyBool在提交后设置为true。
标签: asp.net-core razor asp.net-core-mvc checkboxfor