آموزش ASP.NET MVC5 – فصل۹
آموزش ASP.NET MVC5 - فصل9 : در این جلسه، نحوه اعتبارسنجی در ASP.NET-MVC5 را بصورت قدم به قدم و اصولی آموزش می دهیم. اعتبارسنجی هایی نظیر: اجباری کردن فیلد از طریق Required Validator، تعیین طول رشته توسط StringLength، فرمت ورودی کاربر توسط RegularExpression، تعیین محدوده فیلدها توسط Range Validator و...

 آموزش ASP.NET MVC5 – فصل۹ 

 

با عرض سلام خدمت علاقه مندان به مقالات وب سایت محتوا wink در جلسه پیش موضوع مهم Entity Framework را مورد بررسی قرار دادیم که از طریق لینک زیر می توانید آنرا مطالعه نمائید:

»»» جلسه هشتم از سری آموزشی ASP.NET-MVC5

 

آموزش اعتبارسنجی (Validation) در ASP.NET MVC

 

اعتبارسنجی در MVC

 

اجباری کردن فیلد از طریق Required Validator

فرض کنید میخواهیم فیلد FullName در مدل زیر اجباری (required) باشد و کاربر حتما textbox آنرا در فرم پر کند :

 
namespace Models
{
    public class Learn01 : System.Object
    {
        public Learn01()
        {
        }
        public int Age { get; set; }
        public string FullName { get; set; }
    }
}
                                 

 

اتریبیوت required:

برای اینکار ، باید اتریبیوت required را بصورت زیر به فیلد FullName اعمال کنیم :

 
[System.ComponentModel.DataAnnotations.Required
    (AllowEmptyStrings = false)]
public string FullName { get; set; }
                                 

نکته : همانطور که میدانید نوع داده ای int بصورت پیش فرض nullable نیست یعنی حتما باید توسط کاربر مقداردهی شود . برای اینکه این پیش فرض را تغییر دهیم و نوشتن Age اجباری نباشد ، باید بصورت زیر از علامت سوال استفاده کرد :

public int? Age { get; set; }

 

تعیین طول رشته توسط StringLength

اگر در یک مدل ، فیلدی را از نوع رشته تعریف کنیم و از تکنولوژی EF Code First استفاده کرده باشیم ، این فیلد در دیتابیس از نوع nVarChar max تعریف میشود . حال اگر بخواهیم طول این رشته را عوض کنیم باید از اتریبیوت StringLength استفاده کنیم :

 
[System.ComponentModel.DataAnnotations.StringLength
(maximumLength: 50, MinimumLength = 3)]
public string FullName { get; set; }
                                 

در validation فوق ، حداقل و حداکثر طول رشته FullName را تعیین کرده ایم (بین ۳ تا ۵۰ کاراکتر) .

 

اعتبارسنجی فرمت ورودی کاربر توسط RegularExpression

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

[System.ComponentModel.DataAnnotations.RegularExpression
     (pattern: @"\w+([-+.’]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*”)]
public string EmailAddress { get; set; }

برای سایر Regex ها ، مثلا برای شماره تلفن ، به وب سایت tutsplus مراجعه نمایید .

 

تعیین محدوده فیلدها توسط Range Validator

برای مشخص کردن محدوه ای برای فیلدها بکار میرود که سه تا پارامتر میگیرد : typeof , minimum , maximum :

 
[System.ComponentModel.DataAnnotations.Range
    (type: typeof(int), minimum: "25", maximum: "35")]
public int? Age { get; set; }
                                 

توضیح : فیلد Age باید عدد صحیحی بین ۲۵ و ۳۵ باشد .

 
[System.ComponentModel.DataAnnotations.Range
    (type: typeof(decimal), minimum: "0", maximum: "5000")]
public decimal? Price { get; set; }
                                 

توضیح : فیلد Price باید عدد اعشاری بین ۰ و ۵۰۰۰ باشد .

برای یادگیری و تمرین بیشتر در زمینه Validation ها در ASP.NET MVC به وب سایت asp.net مراجعه نمایید .

 

تا بدین جا با validator های required , range , stringLength , regularExpression آشنا شدیم . در بخش های بعد، با تعدادی دیگر از اعتبارسنجی های MVC آشنا می شویم .

 

مقایسه مقادیر دو تکست‌باکس توسط Compare

به منظور مقایسه دو مقداری که در textbox ها کاربر وارد میکند مانند پسورد و تائید پسورد :

 
public string Password { get; set; }
[System.ComponentModel.DataAnnotations.Compare
    (otherProperty: "Password")]
public string ConfirmPassword { get; set; }
                                 

در دستورات فوق برای فیلد ConfirmPassword اتریبیوت Compare تعریف کرده ایم که توسط پارامتر otherProperty با فیلد Password مقایسه میشود .

نکته : در مثال بالا ما دو تا فیلد بنامهای Password , ConfirmPassword داریم . فقط باید برای فیلد پسورد validator تعریف کنیم (مانند regex stringLength , …) و نیازی به تعریف آنها برای فیلد تائید پسورد نیست .

 

انجام فرآیند ای‌جکسی توسط Remote

وظیفه این اعتبارسنج اینست که بدون آنکه برنامه نویس ، Ajax بلد باشد میتواند یک فرآیند ajax ای را انجام دهد laugh

بعنوان مثال وقتی کاربر در Textbox نام کاربری شروع به تایپ میکند ، یک اکشن سمت سرور صدا زده می شود که نام کاربری ورودی کاربر را چک میکند که اگر قبلا در دیتابیس موجود است و فرد دیگری انرا انتخاب کرده است ، در همان لحظه بصورت Ajax ای پیغامی مبنی بر تکراری بودن username به کاربر نمایش میدهد .

پارامترهای دستور Remote:

پارامترهایی که دستور Remote میگیرد عبارتست از : controllerName , actionName , area  :

 
[System.Web.Mvc.Remote
    (action: "CheckUsername", controller: "Home", areaName: "")]
public string Username { get; set; }
                                 

فرض کنید validator فیلد username را بصورت فوق تعریف کرده ایم . حال اکشن CheckUsername باید تعریف شود . اکشنی که برای اعتبارسنج ریموت نوشته می شود باید دارای خروجی JsonResult باشد و مقداری که در return بر میگرداند از نوع boolean می باشد .

اکشن Remote Validator:

اکشنی که برای Remote Validator نوشته می شود مانند زیر است :

 
[System.Web.Mvc.HttpGet]
public System.Web.Mvc.JsonResult CheckUsername(string username)
{
    bool blnResult = true;
    if (string.Compare(username, "EhsanSafari", ignoreCase: true) == 0)
    {
        blnResult = false;
    }
    return (Json(data: blnResult,
        behavior: System.Web.Mvc.JsonRequestBehavior.AllowGet));
}
                                 

توضیح : در اکشن فوق ، گفته ایم که اگر نام کاربری که کاربر وارد میکند برابر با EhsanSafari بود ، خروجی false را برگرداند وگرنه true .

برای تمرین بیشتر درباره remote validation به وب سایت asp.net مراجعه نمایید . 

 

لزوم یکپارچه‌سازی تمام اعتبارسنجی‌ها:

سناریو : فرض کنید در پروژه خود ، چندین مدل دارید که همگی UserName دارند و validator یکسانی نیز دارند . حال میخواهیم مثلا stringLength آنرا با حداقل ۸ کاراکتر تعریف کنیم . باید برویم در تمام model هایی که ساختیم ، اتریبیوت username را تغییر دهیم و اینکار منطقی و مقروم بصرفه بنظر نمی آید . بنابراین بهتر است validator مربوط به نام کاربری را در یک کلاس تعریف کنیم و فقط در مدل آنرا صدا بزنیم cheeky

تعریف کلاس RegularExpressions.cs:

خب برای اینکار ، فولدری بنام Infrastructure در روت پروژه میسازیم و در ان یک کلاس بنام RegularExpressions.cs تعریف میکنیم و تمام regEx ها را در این کلاس تعریف میکنیم . بهمین ترتیب میتوان برای stringLength ها و سایر اعتبارسنج ها نیز کلاس مرتبط را ایجاد کرد . کلاسی که ما در مثال زیر ساختیم شامل regex برای فیلدهای Email , username , password می باشد :

namespace Infrastructure
{
    public static class RegularExpressions
    {
        static RegularExpressions()
        {
        }

          public const string EmailAddress =
            @" \w+([-+.’]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*";
          public const string username=@"[a-zA-Z0-9_]{6,20}";
          public const string password=@"[a-zA-Z0-9_]{8,20}";
     }
}

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

 

namespace Infrastructure
{
public static class RegularExpressions
{
static RegularExpressions()
{
}

public const string EmailAddress =
@">        [System.ComponentModel.DataAnnotations.RegularExpression
            (pattern: Infrastructure.RegularExpressions.Username)]
        public string Username { get; set; }

namespace Infrastructure { public static class RegularExpressions { static RegularExpressions() { } public const string EmailAddress = @">

 

به همین راحتی!

 

namespace Infrastructure
{
public static class RegularExpressions
{
static RegularExpressions()
{
}

public const string EmailAddress =
@"> 

namespace Infrastructure
{
public static class RegularExpressions
{
static RegularExpressions()
{
}

 

public const string EmailAddress =
@">نمایش پیغام خطای دلخواه :

namespace Infrastructure
{
public static class RegularExpressions
{
static RegularExpressions()
{
}

public const string EmailAddress =
@">

می خواهیم اگر کاربر ، فیلدی را بطور valid وارد نکرد (مثلا فیلدی که required است را خالی رها کند !) پیغام خطای دلخواه ما نمایش داده شود . بدین منظور از دستور ErrorMessage استفاده میکنیم :

namespace Infrastructure
{
public static class RegularExpressions
{
static RegularExpressions()
{
}

public const string EmailAddress =
@">       [System.ComponentModel.DataAnnotations.Required
            (AllowEmptyStrings = false,
            ErrorMessage = "You did not specify Username!")]
        public string Username { get; set; }

namespace Infrastructure
{
public static class RegularExpressions
{
static RegularExpressions()
{
}

public const string EmailAddress =
@">نکته : میتوان از ErrorMessage بصورت پارامتریک استفاده کنیم . توسط دستور string.Format :

namespace Infrastructure
{
public static class RegularExpressions
{
static RegularExpressions()
{
}

public const string EmailAddress =
@">        [System.ComponentModel.DataAnnotations.Display
            (Name = "Confirm Password")]
        [System.ComponentModel.DataAnnotations.Required
            (AllowEmptyStrings = false,
            ErrorMessage = "{0} is required !")]
        [System.ComponentModel.DataAnnotations.Compare
            (otherProperty: "Password")]
        public string ConfirmPassword { get; set; }

namespace Infrastructure
{
public static class RegularExpressions
{
static RegularExpressions()
{
}

public const string EmailAddress =
@">توضیح : در مثال فوق گفتیم که اگر اتریبیوت Display تعریف شده است بجای {۰} مقدار Display را قرار بده وگرنه همان نام فیلد را نمایش میدهد . در این مثال در صورت پر نشدن فیلد تائید پسورد توسط کاربر ، با توجه به اینکه Display تعریف شده است ، کاربر پیغام زیر را مشاهده میکند :

namespace Infrastructure
{
public static class RegularExpressions
{
static RegularExpressions()
{
}

public const string EmailAddress =
@">Confirm Password is required !

namespace Infrastructure
{
public static class RegularExpressions
{
static RegularExpressions()
{
}

public const string EmailAddress =
@">برای تمرین بیشتر میتوانید به وب سایت asp.net مراجعه نمایید .

namespace Infrastructure
{
public static class RegularExpressions
{
static RegularExpressions()
{
}

public const string EmailAddress =
@">

 

namespace Infrastructure
{
public static class RegularExpressions
{
static RegularExpressions()
{
}

public const string EmailAddress =
@"> 

 

 

در بخش قبل نحوه نوشتن validator ها را در کلاسی مجزا و نیز نمایش پیام خطای دلخواه را یاد گرفتیم .

 

لزوم استفاده از Resource:

اکیدا توصیه می شود که پیام ها و سایر متون را بصورت Hard Code در کلاس خود ننویسیم ( در تمام زبانها و محیط های برنامه نویسی نیز این توصیه وجود دارد) و باید آنها را در فایلی بنام Resource تعریف و سپس از آن در مدل یا کلاس خود استفاده کنیم .

 

نحوه ایجاد Resource :

به این منظور ، روی solution پروژه خود راست کلیک کرده و add > new project را انتخاب می کنیم (مطابق شکل زیر) :


افزودن Resources به پروژه

 

سپس از لیست موجود ، یک Class Library از نوع Visual Csharp انتخاب میکنیم و نام آنرا Resources قرار میدهیم (مطابق شکل زیر) :


Add Class Library to Solution

 

در این مرحله روی Resources راست کلیک کرده و یک فولدر جدید به آن اضافه میکنیم و نام آنرا Models میگذاریم . اکنون روی همین فولدر راست کلیک کرده و add>new item را میزنیم . سپس یک Resource File از لیست انتخاب کرده و نام آنرا همان نام مدلی قرار میدهیم که میخواهیم متون داخل آنرا تعریف کنیم (مثلا UserList.resx) 

تمام فیلدهایی که در مدل موردنظرمان هستند را در این فایل بهمراه متن آنها وارد میکنیم (مطابق شکل زیر) :


افزودن محتوا به Resource File

 

دقت کنید که مقدار Access Modifier را از Internal به Public تغییر دهید . مانند شکل بالا .

نکته : در داخل Name نمیتوان از نقطه یا space استفاده کرد ولی در Value هر چیزی که بخواهیم (حتی تگ html) میتوانیم بنویسیم .

 

استفاده از Resource File :

برای استفاده از فایل ریسورسی که در بالا ایجاد کردیم ( فرض کنید برای فیلد Username ) بصورت زیر باید عمل کنیم :

[System.ComponentModel.DataAnnotations.Display
(ResourceType = typeof(Resources.Models.UserList), Name = " username="">

در مثال فوق بجای اینکه متن اتریبیوت Display را بصورت hard code داخل کلاس بنویسیم ، آدرس ریسورس فایل را داده ایم (Resources.Models.UserList) پارامتر Name آن همان Name واقع در UserList.resx می باشد .

آموزش Validation در ASP.NET MVC در اینجا به پایان میرسد . برای تمرین بیشتر به وب سایت asp.net مراجعه شود .

در جلسه بعد ، که جلسه آخر از سری آموزشی MVC می باشد ، با نحوه کار با Ajax در MVC آشنا می شویم . پس جلسه آخر نیز با ما همراه باشید …heart


برچسب‌ها:

StringLengthValidationآموزش MVC Validationآموزش اعتبارسنجی MVCاتریبیوت requiredاستفاده از Resourceاعتبارسنجی mvcاعتبارسنجی در asp.net mvcدستور remote

4 دیدگاه برای “آموزش ASP.NET MVC5 – فصل۹”

    1. S@fari گفت:

      خواهش میکنم

  1. ممنونم دوست عزیز
    سایت شما بسیار زیباست
    موفق باشید

    1. Mohtava-Admin گفت:

      با سلام

      ممنون از لطفتون 🙂

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

هشت + 16 =