【发布时间】:2011-11-26 13:57:42
【问题描述】:
我尝试使用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>
控制器的一部分:
[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>
但不幸的是,验证器没有在客户端触发,有人知道吗?
【问题讨论】:
标签: c# asp.net-mvc validation