剃刀形式的复选框验证存在问题

时间:2018-06-28 17:18:04

标签: c# asp.net-mvc razor

我目前正在实习,并且对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; }

这是我的剃刀标记:

@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会自动生成两个输入。我的问题是验证根本无法在复选框上进行。因此,模型状态始终是无效的,并且在客户端,选中该框时会显示错误消息,而在未选中该框时会消失。我一直在寻找答案,但结果却很短,我的导师也不知道发生了什么事。

1 个答案:

答案 0 :(得分: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>