PDA

View Full Version : آموزش: اعتبار سنجی کنترل ها فرم (Validator Components)



ایمان مدائنی
دوشنبه 13 آذر 1391, 13:37 عصر
با سلام خدمت دوستان

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

و برای چک کردن صحت اطلاعات یا خالی نبودن کنترل ها باید کد های زیادی می نوشتن

در ASP.NET این مشکل ها وجود ندارد و کامپوننت های آماده ای جهت اینکار وجود دارد

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

شامل موارد زیر :
requiredFieldValidator => چک میکنه کنترل خالی نباشد
regularExpressionValidator = > صحت اطلاعات را چک میکنه - مثلا ایمیل معتبر باشد یا شماره تلفن معتبر باشد یا کد پستی و یا ...
rangeValidator = > مقادیر دو کنترل را چک میکنه که مانند هم باشند (مثلا برای رمز عبور و تکرار رمز عبور)
customValidator => برای هر مدل اعتبار سنجی به کار میرود

یعنی خودتان میتوانید با کد انجام بدید

در نمونه ای که ضمیمه کردم میتوانید طرز کار همشون رو ببینید

و فقط موقع زدن کلید ثبت باید معتبر بودن صفحه رو چک کنید


if (BaseValidator.IsFormValid(this.components))
{
MessageBox.Show("صفحه معتبر است");
}


در تصویری که ضمیمه شده می توانید ببینید که ظاهر زیبایی دارند و در صورتی که موس روی آیکن قرار بگیره شما میتوانید پیغامی که برای کامپوننت ست کردید را به کاربر نشان دهید

برای استفاده کلاس ها را به پروژه اضافه کرده و پس از Rebuild کردن پروژه کامپوننت ها به ToolBox اضافه خواهند شد

موفق و پیروز باشید

ایمان مدائنی
دوشنبه 13 آذر 1391, 19:09 عصر
مدت کوتاهی اینجاست

تا 2 روز دیگه تبدیل به تاپیک معمولی خواهد شد

va2012
دوشنبه 13 آذر 1391, 20:03 عصر
ممنون. همونطور که گفتین این کامپوننت ها در ASP.NET وجود دارن ولی چرا خود ماکروسافت شبیه اون ها رو برای برنامه های ویندوزی طراحی نکرده؟ آیا دلیل خاصی داره؟

ایمان مدائنی
دوشنبه 13 آذر 1391, 20:07 عصر
سیاست خواص خودشون رو دارن
خیلی وقته که دیگه WinForm رو ادامه نمیدند
بیشتر تمرکزشون روی ASP.net و الان روی MVC هست

gwbasic
سه شنبه 14 آذر 1391, 08:47 صبح
جهت اعتبار سنجی به این روش دو روش مشابه این (http://msdn.microsoft.com/en-us/library/ms950965.aspx) و این (http://www.codeproject.com/Articles/10093/Validators-for-Windows-Forms-ValidationProvider-Co) نیز وجود دارند. اما چند نکته رو باید مدنظر قرار داد:

به دلیل ماهیت وب و وجود کلاینت و سرور و کندی ارتباط بین این دو بنابراین اعتبار سنجی سمت کلاینت بسیار نیاز هست تا به این شکل بار سرور کمتر شود ولی این مسئله در WinForm وجود ندارد. بنابراین می توان اعتبار سنجی رو در سطح مدلی که پشت فرم وجود دارد انجام داد.

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

و یک مشکلی که در فرم های سنگین وجود دارد این است که با هر جابجایی ای بین کنترل ها اعتبارسنجی مربوطه انجام می شود که برای کاربر آزار دهنده هست و بهتر است این عمل هنگام ثبت تغییرات به یکباره انجام شود

در نهایت این تیپ اعتبار سنجی ها کلی هستند. فرض کنید در فرمی نامی وارد شده هست که باید یکتا باشد. این نوع اعتبار سنجی نیاز به مثلا ارتباط با دیتابیش و چک کردن نامهای موجود هست که به این روش قابل پیاده سازی نیست. و یا موارد از قبیل Bussiness ای مثل "یک دانشجوی مشروطی نمی تواند بیش از 12 واحد انتخاب کند". در ویندوز به دلیل زنده بودن فرم می توان همه این اعتبار سنجی ها رو یکجا و هنگام ثبت اطلاعات انجام داد.

f.beigirad
شنبه 21 بهمن 1391, 14:57 عصر
با سلام.

مثل اینکه شما این برنامه رو با vs 2012نوشتید.
درسته؟

من از 2010 استفاده میکنم.ممنون میشم اگر نسخه ای که روی 2010 هم اجرا شه بذارید.

با تشکر

Fartaj
شنبه 12 اسفند 1391, 10:29 صبح
ابزار مفیدیه فقط یک سوال چطور می شه خاصیت controltovalidate رو با کد بهش داد ؟



requiredFieldValidator6.ControlToValidate = ?

samadblaj
شنبه 12 اسفند 1391, 13:20 عصر
منم برای یکی از پروژه هام دنبال یه روش ایده آل و کاربر پسند و مناسب بودم که بلاخره از همین روش استفاده کردم و خودم به شخصه اعتقاد دارم در هحین پر کردن فیلد ها اعتبار سنجی صورت بگیرد بهتر و مساعد تر هستش تا در پایان و با زدن دکمه ثبت که بهترین کمک رو به رابط کاربری پروژه میکنه...

intel_amd
شنبه 12 اسفند 1391, 14:00 عصر
فکر نمیکنم اگر ما asp کار هستیم دلیل بشه فکر کنیم سیاست خاصی winapp حذف کرده و دنیا دیگه با winapp کاری نداره !!
این کارا و خیلی قوی تر از اینا خیلی ساده تو هر زبان توسط regularExpression قابل پیاده سازی هستند که توسط این میشه هر نوع الگوئی را طراحی و از صحت پیروی از اون الگو با خبر شد , حتی تو javascript هم این هست !
چیز خاصی نیست که کامپوننت بطلبه !

gwbasic
شنبه 12 اسفند 1391, 16:37 عصر
منم برای یکی از پروژه هام دنبال یه روش ایده آل و کاربر پسند و مناسب بودم که بلاخره از همین روش استفاده کردم و خودم به شخصه اعتقاد دارم در هحین پر کردن فیلد ها اعتبار سنجی صورت بگیرد بهتر و مساعد تر هستش تا در پایان و با زدن دکمه ثبت که بهترین کمک رو به رابط کاربری پروژه میکنه...
وقتی صحبت از یک پروژه کوچک هست مختاریم هرجور که راحتیم کد بنویسیم پشت فرم با database ارتباط بر قرار کنیم bussiness validation انجام بدیم و نه موجودیت بدونیم چیه نه تفکیک کد و چند لایه نویسی یه اسپاگتی کد کامل اما وقتی صحبت از یک پروژه بزرگ می شود که نیاز به نگهداری دارد بنابراین ناگزیر هستیم اصول کد نویسی رو رعایت کنیم یکی از این اصول تفکیک کد هست.
در مورد validation امکان داره چندین لایه برای اون وجود داشته باشه یکی لایه ui که validation اولیه رو انجام می ده مثل چک کردن null نبودن و... لایه بعدی لایه سرویس هست که Bussiness Rule های ما در این قسمت وجود دارند و لایه بعدی می تونه DataAccess باشه مواردی مثل بحث Concurrency ... . می بینید که این کامپوننت قسمت کوچکی از این موارد رو می تونه پوشش بده.

در پست قبلی هم چند مورد رو هرچند خلاصه اشاره کردم احتمالا متوجه نشدید لطف کنید یک بار دیگه مطالعه کنید. کسی منکر این نیست که با خروج از یک کنترل عمل validation انجام بشه اما باید همه جواب رو در نظر داشت چه باری روی Database تحمیل می شه و چقدر با پیغام های اعتبار سنجی مون کاربر رو اذیت می کنیم.
در نهایت کسی که win کار میکنه یا web باید تفاوت این دو رو درک کرده باشه و مد نظر داشته باشه. تقلید حتما کور کورانه مشکل ایجاد می کنه

gwbasic
شنبه 12 اسفند 1391, 16:41 عصر
فکر نمیکنم اگر ما asp کار هستیم دلیل بشه فکر کنیم سیاست خاصی winapp حذف کرده و دنیا دیگه با winapp کاری نداره !!
این کارا و خیلی قوی تر از اینا خیلی ساده تو هر زبان توسط regularExpression قابل پیاده سازی هستند که توسط این میشه هر نوع الگوئی را طراحی و از صحت پیروی از اون الگو با خبر شد , حتی تو javascript هم این هست !
چیز خاصی نیست که کامپوننت بطلبه !

به نکته خوبی اشاره کردین asp.net برای راحتی برنامه نویس و اینکه احتمالا برنامه نویس لزوما سواد javascript نداره یکسری امکانات رو برای کنترل ها در نظر گرفته که اعتبارسنحی سمت کلاینت رو راحت کنه در صورتیکه در win نیاز وجود نداره چراکه همه این موارد با سی شارپ کدنویسی می شه