سؤال

لدي زر داخل UpdatePanel.يتم استخدام الزر كزر موافق لـ ModalPopupExtender.لسبب ما، لا يتم إطلاق حدث النقر على الزر.أيه أفكار؟هل فاتني شيء؟

<asp:updatepanel id="UpdatePanel1" runat="server">
    <ContentTemplate>
        <cc1:ModalPopupExtender ID="ModalDialog" runat="server" 
            TargetControlID="OpenDialogLinkButton"
            PopupControlID="ModalDialogPanel" OkControlID="ModalOKButton"
            BackgroundCssClass="ModalBackground">
        </cc1:ModalPopupExtender>
        <asp:Panel ID="ModalDialogPanel" CssClass="ModalPopup" runat="server">
            ...
            <asp:Button ID="ModalOKButton" runat="server" Text="OK" 
                        onclick="ModalOKButton_Click" />
        </asp:Panel>
    </ContentTemplate>
</asp:updatepanel>
هل كانت مفيدة؟

المحلول

أسبكس

<ajax:ModalPopupExtender runat="server" ID="modalPop" 
            PopupControlID="pnlpopup" 
            TargetControlID="btnGo"
              BackgroundCssClass="modalBackground"
             DropShadow="true"
             CancelControlID="btnCancel" X="470" Y="300"   />


//Codebehind    
protected void OkButton_Clicked(object sender, EventArgs e)
    {

        modalPop.Hide();
        //Do something in codebehind
    }

ولا تقم بتعيين الزر "موافق" على أنه OkControlID.

نصائح أخرى

يبدو أن الزر الذي يتم استخدامه كزر "موافق" أو "إلغاء" لـ ModalPopupExtender لا يمكن أن يحتوي على حدث نقر.لقد اختبرت ذلك عن طريق إزالة

OkControlID="ModalOKButton"

من علامة ModalPopupExtender، ويتم تشغيل الزر فوق.سأحتاج إلى اكتشاف طريقة أخرى لإرسال البيانات إلى الخادم.

من الممكن أيضًا أن يكون الزر ضروريًا أسباب التحقق = "خطأ". لقد نجح ذلك بالنسبة لي.

كنت فقط أبحث عن حل لهذا :)

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

الكود الخاص بي (العمل):

<asp:Panel ID="pnlResetPanelsView" CssClass="modalPopup" runat="server" Style="display:none;">
    <h2>
        Warning</h2>
    <p>
        Do you really want to reset the panels to the default view?</p>
    <div style="text-align: center;">
        <asp:Button ID="btnResetPanelsViewOK" Width="60" runat="server" Text="Yes" 
            CssClass="buttonSuperOfficeLayout" OnClick="btnResetPanelsViewOK_Click" />&nbsp;
        <asp:Button ID="btnResetPanelsViewCancel" Width="60" runat="server" Text="No" CssClass="buttonSuperOfficeLayout" />
    </div>
</asp:Panel>
<ajax:ModalPopupExtender ID="mpeResetPanelsView" runat="server" TargetControlID="btnResetView"
    PopupControlID="pnlResetPanelsView" BackgroundCssClass="modalBackground" DropShadow="true"
    CancelControlID="btnResetPanelsViewCancel" />

ضع في زر التحكم السمة "UseSubmitBehavior=false".

لم تنجح أي من الإجابات السابقة بالنسبة لي.لقد قمت باستدعاء إعادة النشر للزر الموجود في حدث OnOkScript.

<div>
    <cc1:ModalPopupExtender PopupControlID="Panel1" 
         ID="ModalPopupExtender1"
         runat="server" TargetControlID="LinkButton1" OkControlID="Ok" 
         OnOkScript="__doPostBack('Ok','')">
    </cc1:ModalPopupExtender>

    <asp:LinkButton ID="LinkButton1" runat="server">LinkButton</asp:LinkButton> 
</div>        


<asp:Panel ID="Panel1" runat="server">
    <asp:Button ID="Ok" runat="server" Text="Ok" onclick="Ok_Click" />            
</asp:Panel>   

غالبًا ما أستخدم تسمية فارغة باسم TargetControlID.السابق. <asp:Label ID="lblghost" runat="server" Text="" />

لقد رأيت شيئين يتسببان في عدم إطلاق حدث النقر:
1.يجب عليك إزالة OKControlID (كما ذكر الآخرون)
2.إذا كنت تستخدم أدوات التحقق من صحة الحقول، فيجب عليك إضافة CausesValidation = "false" على الزر.

تصرف كلا السيناريوهين بنفس الطريقة بالنسبة لي.

لقد وجدت طريقة للتحقق من صحة النافذة المشروطة دون إعادة النشر.

في ModalPopupExtender، قمت بتعيين OnOkScript على وظيفة على سبيل المثال ValidateBeforePostBack()، ثم في الوظيفة أتصل بـ Page_ClientValidate لمجموعة التحقق التي أريدها، وقم بإجراء فحص وإذا فشلت، فاحتفظ بإظهار modalpopup.إذا مر، أتصل __doPostBack.

function ValidateBeforePostBack(){ 
     Page_ClientValidate('MyValidationGroupName'); 
     if (Page_IsValid) { __doPostBack('',''); } 
     else { $find('mpeBehaviourID').show(); } 
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top