اعتبارسنجی های سفارشی در ASP.NET MVC

در ASP.NET MVC برای اعتبارسنجی های سمت سرور می توانیم از Data Annotation ها که قابلیت فعال سازی آنها در سمت کلاینت هم امکان پذیری می باشد ، استفاده کنیم . اکثر اوقات Attribute های  فضای نام System.ComponentModel.DataAnnotations پاسخ گوی نیاز ما هستند هر چند کتابخانه هایی هم در سطح اینترنت موجود هستند که قابلیت ها و توانایی های بیشتر را در اختیار شما قرار میدهند که دو مورد زیر دو نمونه از آنها می باشند :

  1. FluentValidation
  2. foolproof

در شرایط ممکن است نیاز داشته باشیم خود ورودی های کاربر را اعتبار سنجی کنیم ، به طور مثال سایت های چند زبانه نمونه ای از آن می باشد .

کلاس Article زیر را که یک نمونه از سایت های دو زبانه می باشد در نظر بگیرید :

    public class AddArticleVM
    {
        public string Title { get; set; }
        public string TitleEn { get; set; }
        public string Body { get; set; }
        public string BodyEn { get; set; }
        public DateTime RegDate { get; set; }
        public string Author { get; set; }

       public LangType Lang { get; set; }
    }       
public enum LangType
    {
        English,
        Persian,
        Both
    }

منطق ما به این صورت است که  اگر کاربر از dropdown  زبان گزینه فارسی را انتخاب کرد فقط فیلد های مربوط به فارسی را اعتبار سنجی کنیم و  برای انگلیسی هم همینطور و اگر هر دو را انتخاب کرد تمام فیلد های ورودی را اعتبارسنجی کنیم .

برای نوشتن اعتبارسنجی های سفارشی ابتدا فضای نام زیر را اضافه نمایید :

using System.ComponentModel.DataAnnotations;

کلاسی تحت عنوان AddArticleVlidation به صورت زیر ایجاد کنید :

  public class AddArticleVlidation
    {

    }

 برای نوشتن اعتبارسنجی های سفارشی باید از کلاس ValidationAttribute به صورت زیر ارث بری کرده و متد IsValid را بازنویسی کنیم :

public class AddArticleVlidation:ValidationAttribute
    {
        public override bool IsValid(object value)
        {
            return base.IsValid(value);
        }
    }

کلاس AddArticleVlidation را به هر کلاسی اعمال کنیم ، در هنگام اعتبارسنجی،  آن کلاس به متد IsValid پاس داده می شود ، پس ما در اولین مرحله نیز به یک تبدیل داریم به صورت زیر :

 AddArticleVM ArticleObj = value as AddArticleVM;

کدهای لازم برای اعتبار سنجی به صورت زیر خواهد بود :

 public override bool IsValid(object value)
        {
            AddArticleVM ArticleObj = value as AddArticleVM;
            if(ArticleObj.Lang==LangType.Persian || ArticleObj.Lang==LangType.Both)
            {
                if(string.IsNullOrWhiteSpace(ArticleObj.Title))
                {
                    ErrorMessage = "لطفا عنوان فارسی را وارد نمایید";
                    return false;
                }
                if (string.IsNullOrWhiteSpace(ArticleObj.Body))
                {
                    ErrorMessage = "لطفا متن فارسی مقاله را وارد نمایید";
                    return false;
                }
            }
            if (ArticleObj.Lang == LangType.English || ArticleObj.Lang == LangType.Both)
            {
                if (string.IsNullOrWhiteSpace(ArticleObj.TitleEn))
                {
                    ErrorMessage = "لطفا عنوان انگلیسی را وارد نمایید";
                    return false;
                }
                if (string.IsNullOrWhiteSpace(ArticleObj.BodyEn))
                {
                    ErrorMessage = "لطفا متن انگلیسی مقاله را وارد نمایید";
                    return false;
                }
            }
            return true;

        }

کار لازم جهت اعتبارسنجی به اتمام رسید فقط کافیست کلاس فوق را به کلاس مورد نظر به صورت زیر اعمال کنیم :

 [AddArticleVlidation]
 public class AddArticleVM
 {

....

}

 


توسط : عثمان رحیمی  1 ماه قبل ، یکشنبه 3 آبان 1394 ساعت 21:52  0  2012

نظر شما برای ما مهم است و به ما در بهبود سایت کمک میکند.


ارسال نظر
  • نام (اختیاری ) :
  • پست الکترونیک :
  • توضیحات :

مطالب مرتبط