我尝试使用This Way在客户端触发自定义验证程序,但无法正常运行:
这是我的模型和验证器:
public class ExactStringAttribute : ValidationAttribute {
public string ValidName { get; set; }
public override bool IsValid(object value) {
if (value.ToString() == ValidName)
return true;
else
return false;
}
}
public class Teacher {
public long Id { get; set; }
public string Name { get; set; }
public string Family { get; set; }
public int Age { get; set; }
[Display(Name = "SchoolName CustomValidator(ValidName='MySchool')")]
[ExactString(ValidName = "MySchool", ErrorMessage = "The Input Name must
exactly equal by Valid Name")]
public string SchoolName { get; set; }
}
这是我的剧本:
<script type="text/javascript">
Sys.Mvc.ValidatorRegistry.validators["exactstring"] = function (rule) {
// initialization code can go here.
var validname = rule.ValidationParameters["validname"];
// we return the function that actually does the validation
return function (value, context) {
if (value == validname) {
return true; /* success */
}
return rule.ErrorMessage;
};
};
</script>
和Global.asax的一部分:
protected void Application_Start() {
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(ExactStringAttribute),
typeof(ExactStringValidator));
}
public class ExactStringValidator :
DataAnnotationsModelValidator<ExactStringAttribute> {
string validName;
string errorMessage;
public ExactStringValidator(ModelMetadata metadata,
ControllerContext context
, ExactStringAttribute attribute)
: base(metadata, context, attribute) {
validName = attribute.ValidName;
}
public override IEnumerable<ModelClientValidationRule>
GetClientValidationRules() {
var rule = new ModelClientValidationRule {
ErrorMessage = errorMessage,
//Must be lowercase
ValidationType = "exactstring"
};
//Must be lowercase
rule.ValidationParameters.Add("validname", validName);
return new[] { rule };
}
}
我也在_Layout页面添加脚本:
<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript">
</script>
<script src="@Url.Content("~/Scripts/MicrosoftAjax.js")" type="text/javascript">
</script>
<script src="@Url.Content("~/Scripts/MicrosoftMvcAjax.js")" type="text/javascript">
</script>
<script src="@Url.Content("~/Scripts/MicrosoftMvcValidation.js")"
type="text/javascript"></script>
Controller的一部分:
[HandleError]
public class TeacherController : Controller {
......
}
当我在视图页面中添加Html.EnableClientValidation();
表示有关参数的错误但在web.config文件中添加了以下设置时:
<appSettings>
<add key="webpages:Version" value="1.0.0.0"/>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>
但不幸的是,验证者没有在客户端开火,有人知道这个吗?
答案 0 :(得分:3)