我有一个这样的视图模型:
public class SignUpViewModel
{
[Required(ErrorMessage = "Bitte lesen und akzeptieren Sie die AGB.")]
[DisplayName("Ich habe die AGB gelesen und akzeptiere diese.")]
public bool AgreesWithTerms { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
视图标记代码:
<%= Html.CheckBoxFor(m => m.AgreesWithTerms) %>
<%= Html.LabelFor(m => m.AgreesWithTerms)%>
Run Code Online (Sandbox Code Playgroud)
结果:
没有执行验证.到目前为止,这没关系,因为bool是一个值类型,永远不会为null.但即使我使AgreesWithTerms可以为空,它也无法工作,因为编译器大喊大叫
"模板只能用于字段访问,属性访问,单维数组索引或单参数自定义索引器表达式."
那么,处理这个问题的正确方法是什么?
我想在MVC3项目中使用jQuery validate强制我的"同意条款"复选框.我目前从"MS数据注释属性"+"MS MVC3不引人注目的jQuery验证"获得服务器/客户端DRY/SPOT验证.
这是一个独立的测试(由MVC3生成的纯HTML).为什么它不起作用,拜托?运行时,验证确保填写"联系人姓名"字段,但不关心复选框的状态.
<!DOCTYPE html>
<html>
<head>
<title>RequiredCheckbox</title>
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
<script type="text/javascript" src="//ajax.microsoft.com/ajax/jQuery.Validate/1.7/jQuery.Validate.js"></script>
<script type="text/javascript" src="//ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.validate.unobtrusive.js"></script>
<script type="text/javascript" language="javascript">
$(function () {
// http://itmeze.com/2010/12/checkbox-has-to-be-checked-with-unobtrusive-jquery-validation-and-asp-net-mvc-3/
$.validator.unobtrusive.adapters.add("mandatory", function (options) {
options.rules["required"] = true;
if (options.message) {
options.messages["required"] = options.message;
}
}
});
$.validator.unobtrusive.parse(document);
});
</script>
</head>
<body>
<div>
<form>
<input data-val="true" data-val-mandatory="The field Terms Are Accepted is invalid." id="isTermsAccepted" name="isTermsAccepted" type="checkbox" value="true" />
<input name="isTermsAccepted" type="hidden" value="false" />
<span class="field-validation-valid" data-valmsg-for="isTermsAccepted" data-valmsg-replace="true"></span>
<input data-val="true" data-val-required="The Contact Name field is required." …Run Code Online (Sandbox Code Playgroud) 我最近有一个关于在MVC项目中在客户端进行复选框验证的问题.这个问题已成功回答,但提出了另一个问题.
为了使我的复选框验证工作,我需要将以下javascript直接添加到jquery.validate.unobtrusive.js中:
$jQval.addMethod("mustbetrue", function (value, element, param) {
// check if dependency is met
if (!this.depend(param, element))
return "dependency-mismatch";
return element.checked;
});
adapters.add("mustbetrue", function (options) {
setValidationValues(options, "mustbetrue", true);
});
Run Code Online (Sandbox Code Playgroud)
这工作得很好,但我不满意不得不改变这个文件,以防微软或验证插件男孩将来更新文件.如果我还没有在项目上工作,那么这个文件可能会被覆盖而没有人意识到它已被定制.
所以考虑到这一点,我尝试将其添加到外部javascript文件中:
$.validator.addMethod("mustbetrue", function (value, element, param) {
// check if dependency is met
if (!this.depend(param, element))
return "dependency-mismatch";
return element.checked;
});
$.validator.unobtrusive.adapters.add("mustbetrue", function (options) {
setValidationValues(options, "mustbetrue", true);
});
Run Code Online (Sandbox Code Playgroud)
不幸的是,现在我的复选框上的客户端脚本无法运行.谁能看到我做错了什么?
提前致谢
小号