有条件的ConfirmButtonExtender

时间:2010-01-19 19:08:21

标签: c# asp.net javascript

我试图绕过ConfirmButtonExtender,具体取决于页面中另一个字段的值。

基本上,当用户点击我的“取消”按钮时,我通常会使用confirmmbuttonextender和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");
        }

关于我做错的任何想法?

3 个答案:

答案 0 :(得分:4)

正如克里斯所说,你不必拥有一个ConfirmButtonExtender和ModalPopupExtender(尽管这看起来像是一种方式,即JavaScript confirm()函数仅限于OK'和''对话框中的取消按钮 - 注明为未来的技术:-))

如果您在代码隐藏中知道用户不会进行任何编辑(由cbAllowEdit控件证明),那么您应该只能禁用ConfirmButtonExtender:

ConfirmButtonExtenderbtnCancel.Enabled = false;

然后单击“取消”按钮会将您带入代码隐藏功能,而无需进行确认。

答案 1 :(得分:1)

编辑: 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" />

答案 2 :(得分:0)

这个javascript可能有效:

var confirmbtn = $find('ConfirmButtonExtenderID');

confirmbtn.enabled =false;

// ConfirmButtonExtenderID必须是您的ConfirmButtonExtender ID的名称[:$]