اعتبار سنجی کنترل ها در ASP.NET با Data Annotation ها

همانطور که اطلاع دارید ، راه های زیادی برای اعتبار سنجی کنترل ها در صفحات مختلف یک پروژه ASP.NET وجود دارد .

هم می توانید از اعتبار سنجی های سمت کلاینت و یا از اعتبار سنجی سمت سرور استفاده کنید . کنترل هایی هم در ASP.NET وجود دارند که قبلا به توضیح مختصری در باره آنها در اینجا پرداختیم .

در این مقاله قصد داریم اعتبار سنجی های خود را با استفاده از کلاس DataAnnotations که از دات نت 3.5 به بعد موجود می باشد انجام دهیم .

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

using System.ComponentModel;
 using System.ComponentModel.DataAnnotations;
 using System.Web.Mvc;
using System.Web.ModelBinding

حال چندین خاصیت به کلاس Validation اضافه می کنیم و برای هر کدام یک سری محدودیت ها اعمل می کنیم :

در ابتدا یک خاصیت به اسم FirstName به کلاس فوق اضافه می کنیم :

 public string FirstName { get; set; }

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

1- می خواهیم کاربر حتما این فیلد را پر کند ، پس برای این کار خاصیت فوق را به  Attribute زیر مزین می کنیم :

[Required]

 public string FirstName { get; set; }

 با این  کار ، مشخص کرده ایم که این فیلد حتما باید مقدار داشته باشد .علاوه بر این می توان یک پیغام هر برای آن تعیین کرد که کاربر را از لازم بودن این فیلد مطلع کنیم .برای این کار Attribute فوق را به صورت زیر تغییر می دهیم :

[Required(ErrorMessage="لطفا نام خود را وارد کنید")]

public string FirstName { get; set; }

2- می توان طول رشته وارد شده برای فیلد فوق از طرف کاربر را هم مدیریت کرد برای این کار از attribute زیر استفاده می کنیم :  

[StringLength(120, MinimumLength = 3)]

[Required(ErrorMessage="لطفا نام خود را وارد کنید")]

public string FirstName { get; set; }

همچنین می توان یک پیغام را هم برای آن تعیین کرد که کاربر را از فیلتر فوق مطلع کنیم ، برای این کار به صورت زیر عمل خواهیم کرد :

[StringLength(120, MinimumLength = 3,ErrorMessage="نام باید حداقل 3 کاراکتر باشد")]  

 حال که با نحوه استفاده از attribute های کلاس DataAnnotations آشنا شدیم در ادامه فقط به معرفی و عملکرد تعدادی از attribute های این کلاس می پردازیم .

Range :

یک محدوده حداقل و حداکثر برای فیلد مورد نظر تعیین می کند .

 [Range(0.01, 100.00,ErrorMessage = "Price must be between 0.01 and 100.00")]

public decimal Price   { get; set; }

DataType :

نوع یک فیلد را تعیین می کند . برای مثال در هنگام نمایش یک textbox برای Password در تگ TextBox خاصیت TextMode آن را برابر Password قرار می دایم . با این خاصیت هم می توان هم چین کاری انجام داد .

 [DataType(DataType.Password)]  

  public string Password { get; set; }

 Compare :

برای مقایسه یک فیلد با محتوای یک فیلد دیگر به کار می رود . کاربرد آن در هنگام چک کردن Confirm های مختلف می باشد .

[Compare("Password")]  

  public string PasswordConfirm { get; set; }

ScaffoldColumn :

این امکان را می دهد که یک فیلد را در فرم مخفی کنیم :

[ScaffoldColumn(false)]
public int      AlbumId    { get; set; }

RegularExpression :

از این attribute برای نوشتن عبارات با قاعده استفاده می شود . مثالی از کاربرد این attribute در زمان بررسی صحت فرمت یک آدرس ایمیل می باشد .

  [RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}", ErrorMessage = "Email doesn't look like a valid email address.")]  
        public string Email { get; set; }

محدود کردن یک فیلد به اعداد :

در بعضی از موارد ممکن است که فیلدی داشته باشیم که کاربر فقط قادر به وارد کردن اعداد باشد ، برای نمونه شماره تلفن و یا کد ملی . برای انجام این کار راه های زیر وجود دارد :

1- اسفاده از Regular Expression همانند زیر :

[RegularExpression(@"^[0-9]*$", ErrorMessage = "This is needs to be integer")]  

prublic int YourFiled{get;set;}

2- استفاده از attribute زیر :

[Range(0, int.MaxValue, ErrorMessage = "Please enter valid integer Number")]

3-  از Nuget  مقدار DataAnnotationsExtensions را جستجو کرده و آن را  نصب کنید . بعد از اتمام دانلود package فوق ، ابتدا namespace زیر را به کلاس خود اضافه نمایید :

using DataAnnotationsExtensions;

با افزودن namespace فوق ، می توان از attribute زیر جهت فیلتر فیلد های عددی استاده نمود :

[Integer(ErrorMessage="This is needs to be integer")]
public int CustomerId { get; set; }

 و در پایان برای اعتبار سنجی ورودی های کاربر و نمایش پیغام های مربوطه در داخل رویداد Page_Load قطعه کد زیر را می نویسیم :

protected void Page_Load(object sender, EventArgs e)  
        {  
            if (IsPostBack)  
            {  
                Validation v = new Validation();  
                if (TryUpdateModel(v, new FormValueProvider(ModelBindingExecutionContext)))  
                {  
                    ShowMessage(v.ToString());                      
                }  
            }  
        }  

و پیاده سازی متد ShowMessage :

void ShowMessage(string msg)  
        {  
            ClientScript.RegisterStartupScript(Page.GetType(), "validation", "<script language='javascript'>alert('" + msg + "');</script>");  
        }

 


توسط : عثمان رحیمی  4 ماه قبل ، چهارشنبه 20 اسفند 1393 ساعت 22:58  2  3180

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


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

مطالب مرتبط

نظرات خوانندگان

کاربر مهمان (فرزاد)  در تاریخ : 4 ماه قبل ، چهارشنبه 20 اسفند 1393 ساعت 00:00

سلام یک سوال در مورد داده های عددی داشتم فرض کنید میخواهیم بدانیم کاربر عدد وارد کرده یا خیر؟ اگر عبارت وارد شده عددی نبود بهش پیام "لطفا عدد وارد نمایید" نمایش دهیم رهنمایی کنید. با تشکر

عثمان در تاریخ : 4 ماه قبل ، چهارشنبه 20 اسفند 1393 ساعت 00:00

سلام . جواب سوال شما به انتهای مقاله اضافه شد .