Validation ها در MVC

شنبه 25 مهر 1394

در این مقاله می خواهیم در مورد validation ها در mvc صحبت کنیم ، اینکه برای چی از اعتبار سنجی ها استفاده می کنیم ، و چه کاربردی دارد که برای هر وب سایت ، یک سری فیلد وجو دارد که نیاز به پر کردن آن هاست، و کاربران باید این فلیدها را حتما پر نمایند.

Validation ها در MVC

چرا Validation ها:

برای هر وب سایت ، یک سری فیلد وجو دارد که نیاز به پر کردن آن هاست، و کاربران باید این فلیدها را حتما پر نمایند.

کاربران می توانند هر چیزی را که خود فیلد ها نیاز دارند پر نمایند.

اگر کاربران اطلاعات غلط که مربوط به فیلد ها نیست را وارد نمایند، اطلاعات نادرست وارد پایگاه داده می شود.

اگر ما برای این فیلدها یک اعتباری قرار ندهیم کاربران با اطلاعات نادرست پایگاه داده را پر می کنند که این ممکن است حفره های امنیتی را در سایت ما ایجاد کنند.

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

دو نوع validation داریم:

1-server side

2-client side

ما باید validation ها را طوری قرار دهیم که از اطلاعات جدول مان در پایگاه داده مراقبت شود، به طوری که هیچ کسی نتواند خود valid های ما را دور بزند.

در سمت سرور ما می توانیم از asp.net استفاده کنیم، در سمت سرویس گیرنده ما می توانیم برای اعتبار سنجی از جی کوئری ها استفاده کنیم.

یک پروژه ی mvc درست می کنید، داخل model یک کلاس به نام register می سازید

در کلاس بالا برای اینکه بخواهیم نوشته ها به صورت فارسی باشد از display استفاده می کنید.

داخل کلاس home در controller وقتی کلاس register راتعریف کردید کلیک راست کردن یک view با model کلاس register می سازید به صورت تصویر زیر:

خروجی به صورت زیر خواهد بود:

حالا ما باید httppost آن را داخل controller خود اضافه کنیم که وقتی کاربر دکمه ی submit را زد صفحه postback شود.

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

httppost به صورت زیر خواهد بود:

اگر یک breakpoint قرار بدهید داخل پروژه ی خود اگر textbox ها خالی باشد به صورت زیر خواهد بود:

وقتی که خالی باشد null بر می گردد و پیغام خطا نمایش داده می شود.

Data Annotation Attributes:

ویژگی زیر برای ایمیل یا شماره تلفن را مشخص می کند:

[DataType(DataType.EmailAddress)]
public string Email { get; set; }

ویژگی زیر برای محدوده ی سن را مشخص می کند:

[Range(1,100)]
public int Age { get; set; }

ویژگی زیر برای اعتبار آدرس ایمیل را مشخص می کند به صورت زیر:

[RegularExpression(@"^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$", 
      ErrorMessage="لطفا ایمیل را وارد کنید.")]
public string EmailId { get; set; }

برای وارد کردن نام و نام خانوادگی و ...:

[Required(ErrorMessage="لطفا نام خود را وارد کنید")]
public string FirstName { get; set; }

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

[StringLength(50)]
public string FirstName { get; set; }

برای نمایش دادن یک فرمت مثل تاریخ از کد زیر باید استفاده کنید:

[DisplayFormat(DataFormatString = "{0:C}")]
  public Decimal ListPrice { get; set; }

خروجی به صورت زیر خواهد بود:

فرض کنید می خواهیم حقوق کارمندان از 5000000000 از این کمتر نباشد و به کاربر این پیغام را بدهد که حقوق شما از این مقدار کمتر است باید یک اعتبار سنجی سفارشی بنویسیم به صورت زیر و یک متد که بتواند آن را چک کند.

زمانی که با موفقیت پیغام فرستاده شد و اعتبار سنجی درست بود ثبت نام با موفقیت انجام می شود و پیغام زیر را به کاربر خواهد داد.

وقتی کاربر وارد سایت می شود و می خواهد فرم ثبت نام را پر نمایند زمانی که ایمیل خود را وارد می کند ممکن است قبلا هم وارد کرده باشد برای این کار با remote validation کاربر این اطلاعات را چک می کند که آیا ایمیل مورد نظر قبلا وارد شده است یا نه به صورت تصویر زیر

قبل از همه باید اسکریپت های زیر را وارد نمایید:

<script src="~/Scripts/jquery.unobtrusive-ajax.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>

با یک Action کاربر چک می کند این ایمیل که وارد کرده است آیا تکراری است یا نه

اگر اعتبار سنجی سمت کلاینت باشد برای ما خیلی بهتر است به خاطر اینکه بدون اینکه کاربر یک بار دکمه ی submit را بزند و اطلاعات به پایگاه داده برسد، و چک شود این زیاد خوشایند نیست بنابر این بهتر است

قبل از زدن دکمه ی submit اعتبار سنجی ها چک شود.

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید