代码之家  ›  专栏  ›  技术社区  ›  Amanda Kitson

条件确认按钮扩展程序

  •  1
  • Amanda Kitson  · 技术社区  · 16 年前

    根据页面中其他字段的值,我正在尝试绕过confirmbuttonExtender。

    基本上,当用户单击我的“取消”按钮时,我通常使用confirmbuttonextender和modalpoupextender显示一个对话框,确认他们希望取消所做的任何更改并返回上一个屏幕。如果单击“是”,按钮的onclick事件将触发,调用代码隐藏中的一些代码,并将用户重定向到另一个页面。如果他们单击“否”,它将返回到同一页,没有任何更改。

    但是,在某些情况下,我知道我的用户无法执行任何编辑(不允许进行编辑),对于这些用户,我不想显示“是否确定要离开您将释放任何更改”对话框。

    我设置了一个名为“cbalowedit”的隐藏复选框字段,以指示是否允许用户编辑这些字段。

    我在尝试使用 link text 为了让它工作,但它似乎根本没有触发按钮的onclientclick事件。

    这是我的密码。

    aspx和javascript

        <asp:CheckBox ID="cbAllowEdit" runat="server" Checked="true" />
             <asp:Button ID="btnCancel" runat="server" CausesValidation="false" 
        OnClick="btnCancel_Click" Text="Cancel" OnClientClick="disableSubmit();return false;"  />
    <ajaxToolKit:ConfirmButtonExtender ID="ConfirmButtonExtenderbtnCancel" 
        runat="server" DisplayModalPopupID="ModalPopupExtenderbtnCancel" 
        TargetControlID="btnCancel" BehaviorID="ConfirmButtonExtenderbtnCancel" />
    <ajaxToolKit:ModalPopupExtender ID="ModalPopupExtenderbtnCancel" runat="server" 
        BackgroundCssClass="modalBackground" CancelControlID="btnCancelCancel" 
        OkControlID="btnConfirmCancel" PopupControlID="ConfirmCancelPanel" 
        TargetControlID="btnCancel" />
    <asp:Panel ID="ConfirmCancelPanel" runat="server" CssClass="modalWindow" 
                Height="200" Width="450">
                <p class="confirmMessage">
                    Are you sure you want to navigate away from this record?
                </p>
                <div align="center">
                    <p class="feedbackError">If you have made any changes to the record since the last time
                    you saved, they will be lost.</p>
                    <asp:Button ID="btnConfirmCancel" runat="server" Text="Yes" Width="75" />
                    <asp:Button ID="btnCancelCancel" runat="server" Text="No" Width="75" />
                </div>
            </asp:Panel>
            <script type="text/javascript">
                function disableSubmit() {
                    if (document.getElementById('<%= cbAllowEdit.ClientID %>').checked) {
                        return checkSubmit();
                    }
                    else {
                        return true;
                    }
                }
    
                function checkSubmit() {
    
                    var confirmButton = $find('ConfirmButtonExtenderbtnCancel');
    
                    confirmButton._displayConfirmDialog();
    
                }
            </script>
    

    代码隐藏:

    /// <summary>
            /// Runs when the btnCancel button is clicked.
            /// </summary>
            protected void btnCancel_Click(object sender, EventArgs e)
            {
                Page.Response.Redirect("~/Searches/LookupCode/Default.aspx");
            }
    

    我做错了什么有什么想法吗?

    3 回复  |  直到 16 年前
        1
  •  4
  •   PhilPursglove    16 年前

    正如Chris所说,您不必使用confirmbuttonExtender和modalpopupExtender(尽管这看起来像是绕过了这样一个事实的一种方式,即javascript confirm()函数仅限于其“对话”中的“确定”和“取消”按钮,这是一种未来技术)。

    如果您在代码背后知道用户不会进行任何编辑(如CBallowedIt控件所示),那么您应该能够只禁用confirmbuttonExtender:

    ConfirmButtonExtenderbtnCancel.Enabled = false;
    

    然后单击Cancel(取消)按钮将带您进入代码隐藏功能,完全不需要确认。

        2
  •  1
  •   Chris    16 年前

    编辑: 这个 ConfirmPopupExtender 不应该指向 btnCancel .相反,它应该指向一个隐藏的按钮(这就是链接中的示例所做的)。

    <asp:Button ID="btnCancel" runat="server" CausesValidation="false" 
        OnClick="btnCancel_Click" Text="Cancel" OnClientClick="disableSubmit();return false;"  />
    <!-- This is the Hidden Buttons that you need to add and reference in the ConfirmButtonExtender -->
    <asp:Button ID="HiddenButtonConfirm" runat="server" Text="" style="display:none;" />
    <asp:Button ID="HiddenButtonModal" runat="server" Text="" style="display:none;" />
    <ajaxToolKit:ConfirmButtonExtender ID="ConfirmButtonExtenderbtnCancel" 
        runat="server" DisplayModalPopupID="ModalPopupExtenderbtnCancel" 
        TargetControlID="HiddenButtonConfirm" BehaviorID="ConfirmButtonExtenderbtnCancel" />
    <!-- You'll also want the ModalPopup to point to a seperate hidden button. -->
    <ajaxToolKit:ModalPopupExtender ID="ModalPopupExtenderbtnCancel" runat="server" 
        BackgroundCssClass="modalBackground" CancelControlID="btnCancelCancel" 
        OkControlID="btnConfirmCancel" PopupControlID="ConfirmCancelPanel" 
        TargetControlID="HiddenButtonModal" />
    
        3
  •  0
  •   Mohamed Badawey    13 年前

    此javascript可能工作:

    var confirmbtn = $find('ConfirmButtonExtenderID');
    
    confirmbtn.enabled =false;
    

    //confirmButtonExtenderID必须是confirmButtonExtender ID的名称[:$]