【问题标题】:CheckBox always returns null in ASP.NET MVCCheckBox 在 ASP.NET MVC 中总是返回 null
【发布时间】:2019-01-20 07:37:43
【问题描述】:

点击复选框时,使用jQuery提交表单,但复选框总是返回null。

我有以下 Razor 代码:

@using (Html.BeginForm("Index", "HumanResource", new { type = ViewBag.CurrentType }, FormMethod.Post, new { id = "form1" }))
{
 <label class="custom-control custom-checkbox" for="Filter">
        @Html.CheckBox("Filter", new { @class = "custom-control-input" })
        <span class="custom-control-indicator"></span>
        Choose
 </label>
}

// Scripts

<script>
$('#form1 :checkbox').change(function() {
            $("#form1").submit();
   });
</script>

控制器

public async Task<ActionResult> Index(FormCollection fc,int? Filter)
{
    // leftFilter is always null
}

【问题讨论】:

  • 复选框提交布尔值,而不是整数
  • @Andrei 我没有关于它是否是布尔值的问题,在我更改了主题的文件之后,这已经发生了。
  • 这正是您的问题,当模型绑定器无法解析值时,它会将变量设置为 null。 'true' 和 'false' 无法解析为 int

标签: jquery html asp.net-mvc checkbox


【解决方案1】:

当表单提交时,浏览器将发送truefalse 用于表单数据中的filter 输入到表单action URL(处理表单提交的操作方法)。您正在使用可为空的 int(int?) 作为参数来接受 filter 的值。模型绑定器无法将布尔值映射到可为空的 int。它如何知道在数字参数中为 true /false 分配什么值?它只能将传入的布尔值映射到一个布尔参数。

所以把你的参数类型改成bool

[HttpPost]
public async Task<ActionResult> Index4(FormCollection fc, bool filter)
{
    //to so : return something
}

现在,当提交表单时,filter 参数将填充一个值。

建议:当用户点击复选框时提交表单似乎是一种糟糕的用户体验恕我直言,如果用户想要更改怎么办?添加一个单独的“搜索”按钮并在用户单击复选框后提交表单时如何?或者也许考虑一些客户端/ajax 类型的过滤。

【讨论】:

  • 我同意@Shyju 关于用于提交表单的复选框的观点。这是糟糕的用户体验。
猜你喜欢
  • 2012-01-23
  • 2016-04-08
  • 1970-01-01
  • 2021-11-23
  • 2019-09-17
  • 2014-06-29
  • 1970-01-01
  • 2019-03-21
  • 2017-03-10
相关资源
最近更新 更多