我试图绕过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");
}
关于我做错的任何想法?
答案 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的名称[:$]