سؤال

لدي قائمة منسدلة مع إعادة النشر التلقائي مضبوطة على "صحيح".أريد أن يؤكد المستخدم ما إذا كانوا يرغبون حقًا في تغيير القيمة ، والتي تعمل في نشر حدث جانب الخادم (SelectionIndExchanged).

لقد حاولت إضافة سمة onchange "تأكيد الإرجاع("الرجاء النقر فوق موافق للتغيير.وإلا انقر فوق إلغاء؟

عندما أقوم بإزالة سمة onchange من علامة DropdownList، تقوم الصفحة بإعادة النشر.لا يحدث ذلك عند إضافة سمة onchange.هل ما زلت بحاجة إلى توصيل معالج الأحداث (أنا على C# .Net 2.0).

أي خيوط ستكون مفيدة.

شكرًا!

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

المحلول

هل حاولت تعيين حدث onChange على وظيفة جافا سكريبت ثم داخل الوظيفة قم بعرض تنبيه جافا سكريبت واستخدم وظيفة __doPostback في حالة نجاحها؟

أي.

   
drpControl.Attributes("onChange") = "DisplayConfirmation();"

function DisplayConfirmation() {
  if (confirm('Are you sure you want to do this?')) {
    __doPostback('drpControl','');
  }
}

نصائح أخرى

يمكنك الاستفادة من عنصر التحكم CustomValidator "للتحقق من صحة" القائمة المنسدلة عن طريق استدعاء وظيفة جافا سكريبت التي تقوم فيها بالتأكيد ():

        <asp:DropDownList ID="TestDropDown" runat="server" AutoPostBack="true" CausesValidation="true"
            ValidationGroup="Group1"
            OnSelectedIndexChanged="TestDropDown_SelectedIndexChanged">
            <asp:ListItem Value="1" Text="One" />
            <asp:ListItem Value="2" Text="Two" />
        </asp:DropDownList>
       <script type="text/javascript">
            function ConfirmDropDownValueChange(source, arguments) {
                arguments.IsValid = confirm("Are you sure?");
            }
        </script>
        <asp:CustomValidator ID="ConfirmDropDownValidator" runat="server"
            ClientValidationFunction="ConfirmDropDownValueChange" Display="Dynamic" ValidationGroup="Group1"  />

يعمل ما يلي عندما تقوم DropDownList بتشغيل عمليات إعادة النشر الجزئية:

// caching selected value at the time the control is clicked
MyDropDownList.Attributes.Add(
    "onclick",
    "this.currentvalue = this.value;");

// if the user chooses not to continue then restoring cached value and aborting by returning false
MyDropDownList.Attributes.Add(
    "onchange",
    "if (!confirm('Do you want to continue?')) {this.value = this.currentvalue; return false};");

حاليًا، تقوم دائمًا بإرجاع نتيجة confirm(), ، حتى لو عاد true, ، سيظل بإمكانك إيقاف تنفيذ الحدث قبل أن يتم تنشيط إعادة النشر.لك onchange يجب return false; فقط عندما confirm() يفعل أيضا مثل هذا:

if (!confirm('Please click OK to change. Otherwise click CANCEL?')) return false;

لن ينجح تجاوز سمة onchange إذا قمت بتعيين AutoPostBack على القيمة true لأن ASP.NET سيقوم دائمًا بإلحاق ما يلي بنهاية البرنامج النصي الخاص بـ onchange:

;setTimeout('__doPostBack(\'YourDropDown\',\'\')', 0)

إذا قمت بتعيين AutoPostBack على false، فسيتم تجاوز onchange باستخدام البرنامج النصي من النوع "confirm و__doPostBack" (انظر أعلاه، أخطأ..أدناه) ستعمل ولكن قد تضطر إلى إنشاء الدالة __doPostBack يدويًا.

if (!confirm('Please click OK to change. Otherwise click CANCEL?')) return false;

تُرجع دائمًا بحيث يتم إطلاق حدث OnSelectedIndexChanged الخاص بالقائمة المنسدلة سواء قام المستخدم بالنقر فوق "موافق" أو "إلغاء الأمر".

تأكد من أن الحدث الخاص بك سلكي:

dropDown.SelectedIndexChanged += new EventHandler(dropDown_SelectedIndexChanged);

يمكنك أيضًا تطبيق سمة من جانب العميل لإرجاع التأكيد.اضبط الفهرس وفقًا لذلك إذا تم إلغاؤه.

dropDown.Attributes.Add("onchange", "javascript: return confirm('confirmation msg')");
&lt;asp:DropDownList runat="server" ID="ddlShailendra"  AutoPostBack="True" OnSelectedIndexChanged="ddlShailendra_SelectedIndexChanged" onchange="javascript: { if(confirm('Click ok to prevent post back, Cancel to make a postback'))return true;} " &gt;
          &lt;asp:ListItem Text="tes" Value="1" >&lt;/asp:ListItem&gt;
            &lt;asp:ListItem Text="test" Value="-1"&gt;&lt;/asp:ListItem&gt;
            &lt;/asp:DropDownList&gt;

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

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