سؤال

لدي بعض عناصر التحكم الموروثة من أزرار ASP.NET واستخدم "onserverclick".

إذا قام المستخدم بالنقر مرتين، فسيطلق الزر حدثين من جانب الخادم.كيف يمكنني منع ذلك؟

لقد حاولت تعيين "this.disabled='true'" بعد النقر (في السمة 'onclick') عبر جافا سكريبت، ولكن هذا يمنع إعادة النشر الأولى أيضًا.

هل كانت مفيدة؟

المحلول

راجع هذا المثال لتعطيل التحكم في إعادة النشر.يجب أن يساعدك على القيام بما تحاول تحقيقه.

http://encosia.com/2007/04/17/disable-a-button-control-during-postback/

نصائح أخرى

لا تريد بالضرورة إظهار الزر المعطل عند إعادة النشر.تريد التأكد من عدم إرسالهم مرتين عن طريق الخطأ.لذا فإن تعطيل الزر أو إخفائه نتيجة لـ جانب الخادم الإجراء متأخر جدًا بالفعل في اللعبة.عند هذه النقطة، يكون الطلب الثاني في طريقه بالفعل.يتعين عليك إما القيام بذلك باستخدام جافا سكريبت أو التأكد من عدم تشغيل الكود الجانبي للخادم مرتين.

في حالة وجود لوحة تحديث وزر داخل FormView-Template، أستخدم الطريقة التالية:

<script type="text/javascript">
    // Using that prm reference, hook _initializeRequest
    Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(InitializeRequestBuchung);

    // Abfangen von Mehrfachklicks auf Buttons für asynchrone Postbacks im Updatepanel
    function InitializeRequestBuchung(sender, args) {
        var arrButtonIds = ["ButtonInsert", "ButtonUpdate"];

        // Get a reference to the PageRequestManager.
        var prm = Sys.WebForms.PageRequestManager.getInstance();
        if (prm.get_isInAsyncPostBack() & jQuery.inArray(args.get_postBackElement().id, arrButtonIds) > -1) {
            args.set_cancel(true);
        }
    }
</script>

يؤدي هذا إلى إلغاء إعادة النشر التالية إذا كانت إعادة النشر غير المتزامنة لا تزال نشطة حاليًا.يعمل على أكمل وجه.

قال شخص آخر هذا في مكان ما هنا منذ بضعة أيام، وأنا أتفق معه - استخدم جافا سكريبت ببساطة يخفي الزر بدلاً من تعطيله؛يمكنك إظهار صورة "دوارة" في مكانها، مما يتيح للمستخدم معرفة ما يجري.

بدلاً من الاختباء، ما قمت به هو تبديل الأزرار باستخدام جافا سكريبت.أظهر صورة أخرى باللون الرمادي عند النقر على الزر الأول.

قم بتعيين خاصية الزر UseSubmitBehavior إلى false.ثم قم بإنشاء وظيفة OnClientClick التي تعمل على تعطيل الزر.سيبدو شيء هكذا:

<script type="text/javascript">
   function disableFunctn(button){
       button.disabled = true;
   }
</script>
<asp:Button ID="button1" UseSubmitBehavior="false" OnClientClick="disableFunctn(this);"/>

أسرع وأرخص وسيلة:

<asp:Button ID="button1" UseSubmitBehavior="false" OnClientClick="this.disabled=true;"/>

يمكنك أيضًا تجربة btnSave.Enable = false;عند الضغط على الزر وقبل الانتهاء من معالجة الزر في روتين حدث النقر.إذا كنت بحاجة إلى إعادة ضبطه للسماح بتمكينه، فاحصل على زر منفصل يقوم بإعادة ضبط الزر لإعادة استخدامه.

هناك طريقة أخرى تتمثل في ضبط الزر مع التحقق بحيث يتم سؤال المستخدم عما إذا كان يريد الحفظ، ومن المفترض أن يظهر الزر في المرتين.

هناك طريقة أخرى تتمثل في وضع علامة على التواجد الأول ثم تعيين نافذة منبثقة للثاني للتحقق من الاستخدام الثاني أو اللاحق.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top