我试图根据页面中另一个字段的值绕过ConfirmButtonExtender。

基本上,当用户单击我的“取消”按钮时,通常我会使用confirmbuttonextender和modalpopupextender显示一个modalpopup,以显示一个对话框,确认他们希望取消所做的任何更改并返回到先前的屏幕。如果他们单击“是”,则将触发按钮的onclick事件,该事件将调用代码背后的代码并将用户重定向到另一个页面。如果他们单击否,则仅返回同一页面,而没有更改。

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

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

我试图使用在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");
        }


关于我在做什么错的任何想法?

最佳答案

就像克里斯说的那样,您不必具有ConfirmButtonExtender和ModalPopupExtender(尽管这看起来像JavaScript确认对话框中对话框中的Confirm()函数仅限于OK和Cancel按钮这一事实,这是一种技巧,未来:-))

如果您在代码隐藏中知道该用户将不会进行任何编辑(如您的cbAllowEdit控件所示),那么您应该能够仅禁用ConfirmButtonExtender:

ConfirmButtonExtenderbtnCancel.Enabled = false;


然后,单击“取消”按钮将使您直接进入代码隐藏功能,而无需任何确认。

10-06 15:52