【问题标题】:Multiple Target Id's and the ModalPopUp Extender多个目标 ID 和 ModalPopUp 扩展器
【发布时间】:2011-10-10 18:00:01
【问题描述】:

晚上好。

好的,我们开始吧!

是的,我的页面上有以下按钮,我希望使用一个模式弹出窗口来进行两次保存点击。因此,我有以下按钮:

<asp:Button ID="btnSave1" runat="server" OnClick="btnSave1_Click" Text="Save" OnClientClick="$find('showSaveConfirm').show(); return false;" />
<asp:Button ID="btnSave2" runat="server" OnClick="btnSave2_Click" Text="Save" OnClientClick="$find('showSaveConfirm').show(); return false;"/>

<asp:Button ID="btnSaveAll" runat="server" Text="" Style="display: none" />

下面是我的模态面板信息:

<asp:Panel ID="pnlSaveConfirm" runat="server" Style="display: none;" CssClass="modalPopupContainer">
            <div id="Div7" class="modalPopupHeaderPanel">
                <div id="Div8" class="modalPopupHeader">

                </div>
                <asp:LinkButton ID="LinkButton2" runat="server" CssClass="modalPopupClose" CausesValidation="False">Cancel and close</asp:LinkButton>
            </div>
            <div id="Div9" class="modalPopupBannerPanel">
                <div class="modalPopupPanel">
                        <br />
                        You are about to save this piece of data.
                        <asp:Button ID="btnOkSave" runat="server" Text="Ok" />
                        <asp:Button ID="btnCancelSave" runat="server" Text="Cancel" />
                        <br />
        </asp:Panel>
        <ajaxToolkit:ModalPopupExtender ID="mdlPopupSaveConfirm" runat="server" TargetControlID="btnSaveAll" BehaviorID="showSaveConfirm"
            OkControlID="btnOkSave" CancelControlID="btnCancelSave" PopupControlID="pnlSaveConfirm" BackgroundCssClass="modalBackground" />

现在,两个点击都触发了一个模态面板,该面板位于现场。取消,取消但有一个问题。

当我点击 btnOkSave 时,这似乎并没有得到确认,因为 btnSave1_Click 和 btnSave2_Click 服务器端事件没有被触发。

任何想法我做错了什么?

【问题讨论】:

    标签: javascript ajax modalpopupextender confirmbuttonextender


    【解决方案1】:

    好吧,我实际上走了一条稍微不同的路线,看到我在使用 Ajax 工具包时,我实现了 ConfirmButtonExtender 的使用。

    对于两个原始保存,我设置了两个单独的 ModalPopUpExtender 指向同一个面板,它们由 ConfirmButton Extender 执行:

      <ajaxToolkit:ConfirmButtonExtender ID="ConfirmButtonExtender1" 
                        runat="server" ConfirmText="" Enabled="True" TargetControlID="btnSave1" DisplayModalPopupID="mdlPopupSave1Confirm">
                    </ajaxToolkit:ConfirmButtonExtender>
    <ajaxToolkit:ConfirmButtonExtender ID="ConfirmButtonExtender2" 
                        runat="server" ConfirmText="" Enabled="True" TargetControlID="btnSave2" DisplayModalPopupID="mdlPopupSave2Confirm">
                    </ajaxToolkit:ConfirmButtonExtender>
    

    将这些附加到实际面板上:

    <ajaxToolkit:ModalPopupExtender ID="mdlPopupSave1Confirm" runat="server" TargetControlID="btnSave1"
                 OkControlID="btnOkSave" CancelControlID="btnCancelSave"
                PopupControlID="pnlSaveConfirm" BackgroundCssClass="modalBackground" />
                <ajaxToolkit:ModalPopupExtender ID="mdlPopupSave2Confirm" runat="server" TargetControlID="btnSave2"
                 OkControlID="btnOkSave" CancelControlID="btnCancelSave"
                PopupControlID="pnlSaveConfirm" BackgroundCssClass="modalBackground" />
    

    这正是我想要做的。

    仍然很脏,但它可以工作:)

    【讨论】:

      【解决方案2】:

      btnOkSave 没有 OnClick 事件。将此添加到您的控件中:

      OnClick="btnSave1_Click"
      

      【讨论】:

      • 确实如此。但是,我想要实现的是每个 btnSave1、btnSave2 两个触发相同的模式面板但单独的 btnSave1_Click、btnSave1_Click 事件。如果我只是给 btnOkSave - btnSave1_Click,如果我点击 btnOkSave,btnSave2_Click 将不会触发。
      • 啊哈,我明白你的意思了。使用 ASP 控件没有简单的方法可以做到这一点。我的建议是使用单击事件并将其添加到 btnOkSave。设置一个 asp:HiddenField 控件,该控件将包含一个与他们刚刚单击的任何保存按钮相对应的值。将 OnClientClick 设置为 javascript 函数,该函数使用他们单击的保存按钮更新 asp:HiddenField。然后,您可以根据您的 asp:HiddenField 的值访问要在单个 btnSave_Click 事件中执行的保存事件逻辑。肮脏,但有效。
      • 该死!这很肮脏,但至少它会起作用:)谢谢你的建议。
      • 脏就像脏一样,就像任何客户端的 ASP 工作一样。切换到 MVC3 ;)
      • 这是我很长的“待办事项”清单 Kamojoe
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-24
      • 1970-01-01
      • 2012-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-13
      相关资源
      最近更新 更多