Jon*_*han 7 validationattribute unobtrusive-validation asp.net-mvc-3
给定一个如下所示的ViewModel:
public class Login {
[Required]
public string Username { get; set; }
[Required, CustomValidator]
public string Password { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
像这样的视图(Razor语法在这里):
@Html.TextBoxFor(f => f.Password)
Run Code Online (Sandbox Code Playgroud)
我得到以下标记:
<input type="text"
value=""
data-val-required="This field is required." />
Run Code Online (Sandbox Code Playgroud)
但是我希望它还包含我的自定义验证器的'data-'属性.
我想要这样的东西:
<input type="text"
value=""
data-val-required="This field is required."
data-val-customvalidator="XYZ" />
Run Code Online (Sandbox Code Playgroud)
如何使用ASP.NET MVC 3.0实现这一目标?
例如,我是否需要在自定义验证器上添加一些特殊属性?或者在某处注册?
好吧,MSDN救了我(就像它经常那样).
http://msdn.microsoft.com/en-us/library/ff398048.aspx
首先,我必须为我的验证属性创建一个适配器:
public class CustomAttributeAdapter : DataAnnotationsModelValidator<EmailAttribute>
{
public CustomAttributeAdapter(
ModelMetadata metadata,
ControllerContext context,
CustomAttribute attribute) :
base(metadata, context, attribute)
{
}
public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()
{
ModelClientValidationRule rule = new ModelClientValidationRule()
{
ErrorMessage = ErrorMessage,
ValidationType = "custom"
};
return new ModelClientValidationRule[] { rule };
}
}
Run Code Online (Sandbox Code Playgroud)
('ValidationType'设置必须小写才能生效,因为这是将用作HTML5属性的后修复 - 'data-val-custom'.)
然后,我需要做的就是在Application_Start上注册它.
DataAnnotationsModelValidatorProvider.RegisterAdapter(
typeof(EmailAttribute),
typeof(EmailAttributeAdapter));
Run Code Online (Sandbox Code Playgroud)
期待HTML5验证带来很多乐趣.:)
| 归档时间: |
|
| 查看次数: |
6707 次 |
| 最近记录: |