在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
自己开发的公众号,可以领取淘宝内部优惠券上文只说了客户端的自定义验证,这样对于用户的输入还是不够可靠,用户完全可以绕过我们定义的客户端验证。所以仅有客户端的验证还是不够的,我们还需要在服务器端进行再次验证。 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); }
UrlAttributeUrlAttribute 是用来验证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名字改下取消客户端验证,提交到服务端进行验证
|
请发表评论