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