ASP.NET MVC ValidationAttribute 服务器端自定义验证
客户端验证
上文只说了客户端的自定义验证,这样对于用户的输入还是不够可靠,用户完全可以绕过我们定义的客户端验证。所以仅有客户端的验证还是不够的,我们还需要在服务器端进行再次验证。
ValidationAttribute
服务端验证要继承自ValidationAttribute,并重写IsValid虚方法来自定义自己的验证规则,ValidationAttribute声明大致如下
public abstract class ValidationAttribute : Attribute { //验证失败提示消息 public virtual string FormatErrorMessage(string name); //自定义验证一 protected virtual ValidationResult IsValid(object value, ValidationContext validationContext); //自定义验证二 public virtual bool IsValid(object value); } |
UrlAttribute
UrlAttribute 是用来验证Url格式的有效性,这个特性在NET Framework 4.5已经自带实现。我们就参考着做个例子。
public
class Link { [Required] [DisplayName( "文字" )] public
string Text { get ; set ; } [Url] [Required] [DisplayName( "Url链接" )] public
string Url { get ; set ; } } public
class UrlAttribute : ValidationAttribute,IClientValidatable { public
override string FormatErrorMessage( string
name) { return
string .Format( "{0}格式有误" , name); } public
UrlAttribute() { } public
override bool IsValid( object
value) { var
text = value as
string ; Uri uri; return
(! string .IsNullOrWhiteSpace(text) && Uri.TryCreate(text, UriKind.Absolute, out
uri)); } public
IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) { var
validationRule = new
ModelClientValidationRule { ErrorMessage = FormatErrorMessage(metadata.DisplayName), ValidationType = "url" , }; yield
return validationRule; } } |
UrlAttribute实现服务端和客户端的验证,客户端我们只是为input控件添加data-val-url属性,但他的客户端验证还是有效的,因为validate这个插件已经实现它的js验证脚本。
我们将ValidationType名字改下取消客户端验证,提交到服务端进行验证
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。