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名字改下取消客戶端驗證,提交到服務端進行驗證

 

代碼下載


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM