PDA

View Full Version : خبر: دانلود کامپوننت اعتبارسنجی ExistFieldValidator



alireza_s_84
پنج شنبه 09 مهر 1388, 09:49 صبح
سلام دوستان:
همانطور که قول داده بودم یک کامپوننت طراحی کردم به نام ExistFieldValidator .
کار این کامپوننت بررسی وجود یا عدم وجود یک فیلد از قبل در پایگاه داده است(البته میتونید در موارد دیگه ای بنا به ابتکار خودتون ازش استفاده کنید.


چند نکته پیرامون این کنترل:
1) استفاده از این کنترل دقیقاً همانند کنترل های Validation در ASP.NET هست و هیچ خصوصیت اضافه ای نداره(البته بعدها ممکنه اضافه بشه)
2) این کنترل، بررسی رو در دو سطح کلاینت و سرور انجام میده.
3) سیستم کار کامپونت وابسته به CallBack میباشد.
4) شما میتونید قبل از ثبت کاربر در همون کلاینت بفهمید که آیا نام کاربری یا آدرس ایمیل کاربر از قبل توی دیتابیس ذخیره شده یا خیر.
5) با داشتن فقط یک تابع میتونید هر تعداد فیلد رو در دیتابیس مورد جستجو قرار بدین.
6) فقط با چک کردن خاصیت IsValid و نه هیچ کار اضافه ی دیگه ای میتونید عملیات خودتون رو مدیریت کنید.

روش استفاده:
این کامپوننت دارای یک متد به نام ServerValidate میباشد(که نحوه پیاده سازی آن مانند کنترل CustomValidator میباشد) که یک نمونه آن به صورت زیر است:


protected void ExistFieldValidator1_ServerValidate(Object source, ServerValidateEventArgs args)
{
if (args.Value == "alireza")
{
args.IsValid = true;
}
else
{
args.IsValid = false;
}
}
در کد بالا اگر توجه کنید یک پارامتر به نام args داریم. این پارامتر دارای دو خصوصیت است:
args.Value: که مقدار کنترلی که باید اعتبارسنجی بشود را بر میگرداند.
args.IsValid: را ما تعیین میکنیم که اگر برابر true باشد نتیجه اعتبار سنجی معتبر است.
ما میتوانیم یک تابع بنویسیم که مقدار بازگشتی آن Boolean باشد . این تابع میتواند در دیتابیس فیلد مورد نظر ما را جستجو کنید اگر وجود داشته باشد مقدار false و در غیر اینصورت مقدار true برگرداند با اینحساب میتوانید مقدار args.IsValid را برابر مقدار بازگشتی آن تابع قرار دهیم و فقط با نوشتن یک تابع عمل اعتبارسنجی (که اکثریت سایتهایی که عضو میگیرند) میتوانیم در سمت کلاینت عمل اعتبارسنجی را انجام دهیم(این کنترل تابع سمت سرور را با ایجکس در سمت کلاینت فراخوانی میکند)
دوستان عزیز، اگر در رابطه با استفاده از این کنترل به مشکلی برخورد یا باگی مشاهده کردند، در همین تاپیک اعلام بفرمایند.
نظر یادتون نره
موفق باشید

nahid1388
پنج شنبه 09 مهر 1388, 16:58 عصر
سلام مرسی خیلی عالی بود:تشویق:

shahlaj
سه شنبه 27 خرداد 1393, 20:47 عصر
ممنون عالیه فقط این شرط علیرضا رو چطور بصورت عمومی دربیارم؟
ببخشید من خیلی مبتدی هستم بیشتر توضیح بدین.

alireza_s_84
سه شنبه 27 خرداد 1393, 21:54 عصر
ممنون عالیه فقط این شرط علیرضا رو چطور بصورت عمومی دربیارم؟
ببخشید من خیلی مبتدی هستم بیشتر توضیح بدین.
ببینید ما داریم میگیم هروقت args.IsValid برابر true بود یعنی نتیجه اعتبار سنجی صحیحه و مشکلی نیست. حالا باید چکار کنیم یک تابع تعریف میکنیم و درون اون به دیتابیس وصل میشم و ایمیل مورد نظر رو جستجو میکنیم. دو حالت وجود داره یا هست یا نیست. اگر بود false برمیگردونیم (چون اگر باشه نتیجه اعتبار سنجی غلطه) و اگر نبود true.
فقط کافیه شما args.IsValid رو برابر نتیجه برگشتی تابع قرار بدین:
ضمیمه رو دانلود کنید.

shahlaj
پنج شنبه 29 خرداد 1393, 09:23 صبح
[QUOTE=alireza_s_84;2044378]ببینید ما داریم میگیم هروقت args.IsValid برابر true بود یعنی نتیجه اعتبار سنجی صحیحه و مشکلی نیست. حالا باید چکار کنیم یک تابع تعریف میکنیم و درون اون به دیتابیس وصل میشم و ایمیل مورد نظر رو جستجو میکنیم. دو حالت وجود داره یا هست یا نیست. اگر بود false برمیگردونیم (چون اگر باشه نتیجه اعتبار سنجی غلطه) و اگر نبود true.
فقط کافیه شما args.IsValid رو برابر نتیجه برگشتی تابع قرار بدین



تابع رو درServerValidate تعریف کنم؟

alireza_s_84
پنج شنبه 29 خرداد 1393, 09:49 صبح
[QUOTE=alireza_s_84;2044378]ببینید ما داریم میگیم هروقت args.IsValid برابر true بود یعنی نتیجه اعتبار سنجی صحیحه و مشکلی نیست. حالا باید چکار کنیم یک تابع تعریف میکنیم و درون اون به دیتابیس وصل میشم و ایمیل مورد نظر رو جستجو میکنیم. دو حالت وجود داره یا هست یا نیست. اگر بود false برمیگردونیم (چون اگر باشه نتیجه اعتبار سنجی غلطه) و اگر نبود true.
فقط کافیه شما args.IsValid رو برابر نتیجه برگشتی تابع قرار بدین

تابع رو درServerValidate تعریف کنم؟


ServerValidate که خودش یه تابعه شما میتونید کدهای جستجو توی دیتابیس رو توی همین تابع بنویسید یا اینکه یک تابع جدید تعریف کنید و کدها رو توی اون قرار بدین. توی مثالی که ضمیمه کردم دقیقا نحوه ی استفاده شو گذاشتم میتونید ببینید.

shahlaj
پنج شنبه 29 خرداد 1393, 10:18 صبح
کدهای جستجو توی دیتابیس رو توی تابع ServerValidate نوشتم همه چی هم درسته ولی وقتی میخوام با ایمیل تکراری وارد بشم خطا نمیده و وارد میشه...........

alireza_s_84
پنج شنبه 29 خرداد 1393, 10:44 صبح
کدهای جستجو توی دیتابیس رو توی تابع ServerValidate نوشتم همه چی هم درسته ولی وقتی میخوام با ایمیل تکراری وارد بشم خطا نمیده و وارد میشه...........
کدهایی که نوشتین رو کامل بذارین اینجا + رویداد
ServerValidate

shahlaj
پنج شنبه 29 خرداد 1393, 11:07 صبح
120309
من میخوام کاربر با یه شماره کارتی دوبار ثبت نام نکنه.

alireza_s_84
پنج شنبه 29 خرداد 1393, 12:29 عصر
120309
من میخوام کاربر با یه شماره کارتی دوبار ثبت نام نکنه.






خودتون مقایسه کنید و ببینید کجای کارتون ایراد داشت:

string query = String.Format("SELECT COUNT(*) FROM Shomareh WHERE Number = {0}", args.Value);
SqlConnection cnn = new SqlConnection(strCnn);
SqlCommand cmd = new SqlCommand(query, cnn);
cmd.CommandType = CommandType.Text;
int result = (int)cmd.ExecuteScalar();
args.IsValid = (result == 0);

shahlaj
پنج شنبه 29 خرداد 1393, 15:31 عصر
ممنون متوجه شدم ولی من از linq استفاده کردم حالا این کدها رو چطور تغییر بدم؟
ببخشید خیلی سوال کردم آخه خیلی عجله دارم باید تحویل استاد بدم.

shahlaj
جمعه 30 خرداد 1393, 18:39 عصر
string query = String.Format("SELECT COUNT(*) FROM Shomareh WHERE Number = {0}", args.Value0);
SqlConnection cnn = new SqlConnection(strCnn);
SqlCommand cmd = new SqlCommand(query, cnn);
cmd.CommandType = CommandType.Text;
int result = (int)cmd.ExecuteScalar();
args.IsValid = (result == 0);

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

shahlaj
یک شنبه 01 تیر 1393, 20:59 عصر
سلام آقای علی رضا اگه میشه لصفا جواب بدین قول میدم این آخرین سوال باشه.
چرا وقتی اجرا میکنم هر شماره ای که وارد کنم میگه این شماره قبلا ثبت شده یعنی اصلا چک نمی کنه شماره قبلا ثبت شده یانه.شماره ای هم که جدیده و تو دیتابیس نیست رو هم قبول نمیکنه.این هم کدهام.120405

alireza_s_84
دوشنبه 02 تیر 1393, 00:27 صبح
سلام آقای علی رضا اگه میشه لصفا جواب بدین قول میدم این آخرین سوال باشه.

سلام ، شما هر چند تا سوال دارین بپرسین ما اینجا هستیم تا مشکلات همدیگه رو حل کنیم.

اول از همه این خط کد رو حذف کنید شما نیازی به اون ندارین:
string number = textbox4.Text;
پارامتر args که توی ایونت بکار برده شده دارای دوتا خصوصیت هست:
1- args.IsValid: که مشخص میکنه نتیجه ی اعتبارسنجی درست هست یا نه.
2- args.Value: که حاوی مقدار وارد شده توی کنترلی هست که داریم اعتبارسنجی میکنیم در واقع توی این مثال args.Value همون textbox4.Text هست.

دوم من به ساختار کلاسهای شما دسترسی ندارم ولی فکر میکنم شما یک کلاس با نام dblqDataContext داشته باشین و یک جدول با نام shomareh. اگر اینطور باشه شما کدهای خودتون رو اینطوری باید بنویسید:

dblqDataContext db = new dblqDataContext();
var result = db.ExecuteQuery<int>("SELECT COUNT(*) FROM Shomareh WHERE Number = {0}", args.Value).ToList();
args.IsValid = (result.Count == 0);


یا اینطوری فکر میکنم بهتر باشه:

int count = (from row in db.shomareh
where row.shomareh == args.Value
select row).Count();
args.IsValid = (count == 0);

shahlaj
دوشنبه 02 تیر 1393, 11:18 صبح
سلام ممنون که جواب دادین.این چیزای که شما گفته بودین رو انجام دادم ولی خطای زیر رو میگیره.120413
کلاس dblqDataContextvدارم ولی مثل اینکه باید چیزی اضافه اش کنم؟؟؟؟؟؟؟؟؟؟؟؟

alireza_s_84
دوشنبه 02 تیر 1393, 14:58 عصر
سلام ممنون که جواب دادین.این چیزای که شما گفته بودین رو انجام دادم ولی خطای زیر رو میگیره.120413
کلاس dblqDataContextvدارم ولی مثل اینکه باید چیزی اضافه اش کنم؟؟؟؟؟؟؟؟؟؟؟؟

َما ببینید کدی که من میذارم یک نمونه ست برای اینکه شما روش کار رو بدونید نه که همین رو استفاده کنید. این یعنی در کلاس linq شما کلاسی به اسم shoomareh وجود نداره. خب من که از ساختار کلاس linq شما اطلاعی ندارم. براتون مثال زدم که چطور میتونید ببینید یک شماره توی دیتابیس هست یا نه.
اساس کار اینه شما ابتدا شماره رو توی دیتابیس جستجو کنید خب دو حالت داره یا هست یا نیست. حالا میتونید تعداد رکوردها رو بدست بیارین یا اینکه یک متغیر bool تعریف کنید این بستگی به خودتون داره در نهایت اگر وجود داشت یا تعداد رکوردها بیشتر از 0 بود شما باید args.Isvalid رو برابر false قرار بدین و گرنه true برگشت میدین.
فکر نمیکنم کار سختی باشه یک سلکت خیلی ساده ست!!!

shahlaj
دوشنبه 02 تیر 1393, 15:47 عصر
فکر نمیکنم کار سختی باشه یک سلکت خیلی ساده ست!!!

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

moongairl
سه شنبه 06 بهمن 1394, 11:32 صبح
سلام.
در این کامپوننتی که تعریف کردین، کنترل ExistFieldValidator خونده نمیشه و ارور میده. حتی در فایل تعریفی خودتون هم همین طور هست.
چی کار باید بکنیم؟!