【问题标题】:Trouble with checkbox validation in Razor formRazor 表单中的复选框验证问题
【发布时间】:2018-06-29 02:17:32
【问题描述】:

我目前正在实习,对 Razor 和 C# MVC 完全陌生。我目前正在构建一个简单的 Razor 表单,但我的验证让我对复选框感到悲痛。

这是我的型号代码:

[DisplayName("Sign me up for spam* ")]
[Range(typeof(bool), "true", "true", ErrorMessage = "You must sign up for spam.")]
public bool Check { get; set; }

这是我的 Razor 标记:

@Html.LabelFor(model => model.Check, new { @class = "" })
@Html.CheckBoxFor(model => model.Check, new { @class = "example1"})

这是生成的 HTML:

<input class="example1" data-val="true" data-val-range="You must sign up for spam." data-val-range-max="True" data-val-range-min="True" data-val-required="The Sign me up for spam*  field is required." id="Check" name="Check" type="checkbox" value="true">
<input name="Check" type="hidden" value="false">

我知道 Razor 会自动生成这两个输入。我的问题是验证根本不适用于复选框。因为它,模型状态总是无效的,并且在客户端,选中框时会出现错误消息,而取消选中框时会消失。我一直在谷歌上寻找答案,但没有找到答案,而且我的导师也不知道出了什么问题。

【问题讨论】:

  • 我无法重现该问题。你能添加完整的代码吗?
  • @DaniloDebiaziVicente 我通过制作自定义验证属性为模型进行了验证,但在客户端仍然损坏。我将尝试放入您发布的 jQuery,看看会发生什么。谢谢!

标签: c# asp.net-mvc razor


【解决方案1】:

这看起来像是客户端反向问题。在你的页面中添加这个 jquery,我认为它会被修复:

<script>
    // extend range validator method to treat checkboxes differently
    var defaultRangeValidator = $.validator.methods.range;
    $.validator.methods.range = function(value, element, param) {
        if(element.type === 'checkbox') {
            // if it's a checkbox return true if it is checked
            return element.checked;
        } else {
            // otherwise run the default validation function
            return defaultRangeValidator.call(this, value, element, param);
        }
    }
</script>

【讨论】:

  • 谢谢!这行得通!知道为什么客户端会反转它吗?我没有将任何自己的代码添加到客户端。我试图了解我的代码发生了什么,而不仅仅是修补解决方案。
  • 因为它在 MVC 中默认设置为 true,尽管它会在浏览器上显示取消选中,所以验证可能无法按预期工作,这就是为什么你必须将此 jquery 代码添加到修复验证。
猜你喜欢
  • 1970-01-01
  • 2020-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-04
相关资源
最近更新 更多