غیر فعال کردن button در صورت کلیک بر روی آن ، یک راه حل
یکی از روش هائی که برای جلوگیری از چند بار کلیک بر روی button ها در یک صفحه وب استفاده می شود غیر فعال کردن button بلافاصله بعد از کلیک بر روی آن می باشد ، در این روش دیگر کاربر نمی تواند چند بار کلیک کند و متوجه میشود که صفحه در حال پردازش است و میبایستی تا فعال شدن button منتظر باشد ، نمایش یک پیغام بلافاصله بعد از غیرفعال کردن button و یا نمایش یک عکس gif هم می تواند در این راه به شما کمک کند.
روش پیاده سازی چنین سناریوی بسیار ساده است ، کافیست که رویداد Onclick رو به button مربوطه اضافه نمائید و سپس در آن رویداد button را غیر فعال کرده و سپس رویداد PostBack را صدا بزنید . یک نمونه برنامه به شکل زیر است :
System.Text.StringBuilder sbValid = new System.Text.StringBuilder();
sbValid.Append("this.value = 'Please wait...';");
sbValid.Append("this.disabled = true;");
sbValid.Append(this.Page.GetPostBackEventReference(this.btnSubmit));
تنها موردی که باقی می ماند تا این سناریو به صورت کامل پیاده سازی شود بحث کنترلهای اعتبار سنجی یا همان Validation Controls می باشد ، در این روش به محض کلیک بر روی button ، کنترل مورد نظر غیر فعال میشود و سپس رویداد مربوط به Post Back صدا زده می شود ، برای حل این مشکل کافیست قبل از غیرفعال کردن تابع Page_ClientValidate را صدا بزنیم ، این تابع به ما میگوید که صفحه معتبر است یا خیر / پس کد کامل به شرح زیر می شود :
System.Text.
StringBuilder sbValid =
new System.Text.
StringBuilder();
sbValid.Append(
"if (typeof(Page_ClientValidate) == 'function') { ");
sbValid.Append(
"if (Page_ClientValidate() == false) { return false; }} ");
sbValid.Append("this.value = 'Please wait...';");
sbValid.Append("this.disabled = true;");
sbValid.Append(this.Page.GetPostBackEventReference(this.btnSubmit));
حال در صورتیکه صفحه معتبر نباشد button غیر فعال نمی شود .
در انتها یادآور میشوم که چندی پیش هم یک مطلبی نوشتم در مورد غیر فعال کردن صفحات ، از آن هم برای حل این مشکل می توان استفاده کرد.
مشاهده مطلبمنبع مقاله :
Disable Button On PostBack (ASP.NET) - also works with validation controlsموفق باشید.