يقوم DoPostback بتحديث الصفحة ولكنه لا يلتقط معالج الحدث

StackOverflow https://stackoverflow.com//questions/25041404

سؤال

بادئ ذي بدء، يجب أن أذكر أنني أقضي يومًا كاملاً في البحث ولا أستطيع معرفة الخطأ في الكود الخاص بي ولماذا لا يعمل ...

أحتاج إلى مربع حوار مشروط للتأكيد في الكود الخاص بي، لذلك أستخدم مربع حوار jQuery المشروط هذا: تأكيد مسج

ما أحتاجه هو تضمين هذه الوظيفة مع ملف <asp:Button>...

مشكلتي هي أنه عندما أنقر على الزر، تظهر نافذة الحوار المنبثقة ولكن أزرار نعم/لا لا تعمل وكلاهما يختفي مربع الحوار.

كما أنني أستخدم الكود أدناه ولكن __doPostBack() لم يفعل أي شيء على الإطلاق ولكنه يقوم بتشغيل رموز js بسيطة مثل التنبيه ('') بشكل مثالي:

$("#complexConfirm").confirm({
     title: "Redirect confirmation",
     text: "This is very dangerous, you shouldn't do it! Are you really really sure?",
     confirm: function (button) {
         __doPostBack('complexConfirm', 'OnClick');
     },
     cancel: function (button) {
         return false;
     },
     confirmButton: "Yes",
     cancelButton: "No"
});

أقوم بالبحث والحوار لأن عنصر السبب يأتي خارج عنصر النموذج لذا يجب أن أعيده إلى النموذج ولكني لا أعرف كيف أحاول استخدام الكود أدناه ولا يحدث ذلك

$("#editEventModal").parent().appendTo(jQuery("form:first"));

مشكلة أخرى هي أنني أحاول إعادة النشر باستخدام حدث جافا سكريبت بدون مربع الحوار، فأنا أستخدم زرين أحدهما للاتصال بجافا سكريبت وآخر للاتصال بذلك، ولكن عندما أستخدم __doPostBack فإنه يقوم بتحديث الصفحة ولكنه لا يأتي إلى حدث الزر الخاص بي في الكود -في الخلف، أحاول عدة طرق للاتصال بحدث زر onClick ولكنه يقوم فقط بتحديث الصفحة ولا يستدعي زر OnClick Mehtod الخاص بي !!!

إعلان الأزرار كالتالي:

<asp:Button ID="complexConfirm" ClientIDMode="Static" runat="server" OnClick="TestBTN_Click" Text="Test" />
<asp:Button ID="checkit" ClientIDMode="Static" runat="server" OnClientClick="__doPostBack('<%=complexConfirm.UniqueID%>', '');" Text="CHECK" />

ماذا علي أن أفعل لهاتين المشكلتين؟

أبحث كثيرًا ولم تنجح معي الحلول !!!

وسوف أقدر أي حل، شكرا لك.

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

المحلول

بدون معرفة إعلان زر asp:button، إليك أفضل تخميني.

تحتاج إلى استخدام المعرف الفريد للزر، وسمة "اسم" الزر، وليس معرفه.

__doPostBack('<%=complexConfirm.UniqueID%>', '');

وأيضًا، نظرًا لأنه زر، فأنت لا تحتاج فعليًا إلى تحديد OnClick

يحرر:لقد قمت بإنشاء مثال عملي يوضح ما أعتقد أنك تحاول تحقيقه.يمكنك تخصيص هذا لتأكيد jQuery الخاص بك حسب الحاجة.

أسبكس:

<asp:Button ID="btnTest1" runat="server" Text="Test1" OnClick="btnTest1_Click" />

جافا سكريبت:

<script>
    $('#<%=btnTest1.ClientID%>').confirm({
        text: "This is very dangerous, you shouldn't do it! Are you really really sure?",
        title: "Confirmation required",
        confirm: function (button) {
            // do something
            __doPostBack('<%= btnTest1.UniqueID%>', '');
        },
        cancel: function (button) {
            // do something
        },
        confirmButton: "Yes I am",
        cancelButton: "No",
        post: true
    });
</script>

الكود خلف:

protected void btnTest1_Click(object sender, EventArgs e)
{
    Response.Write("You clicked YES");
}

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

لذا، أول شيء فعلته هو إزالة StaticClientID.لا يزال بإمكانك استخدام jquery مع المعرفات التي تم إنشاؤها بواسطة asp.net.ثم تأكدت من تسمية الحدث btnTest1_Click لأن اسم الزر هو btnTest1

لست متأكدًا من سبب احتياجك للزر الآخر، لأنه يبدو أن كل ما تحاول فعله هو التأكيد قبل إرسال الزر.

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