我正在尝试使用CodeBehind Events和JavaScript事件创建一个弹出对话框。我创建了一个按钮,启动以下对话框。这很好。
<script type="text/javascript">
function ShowDialog(aPage, aWidth, aHeight, aTitle) {
var $popupURL = aPage;
var $popupDv = $("#resultDiv");
jQuery.ajax({ url: $popupURL,
cache: false,
success: function (html) {
$popupDv.empty().append(html);
$popupDv.dialog({
width: aWidth,
height: aHeight,
modal: true,
title: aTitle,
draggable: false,
resizable: false
});
}
});
}
</script>
按钮代码:
<form id="form1" runat="server">
<div>
<div id="resultDiv">
</div>
<input id="Edit1Button" type="button" value="Edit 1" onclick="ShowDialog('edit3.aspx?ID=1', 600, 400, 'Hello Edit 1')" />
</div>
</form>
请记住,这只是测试代码..好吧,点击按钮后弹出一个对话框。在对话框中,我有以下代码..
<form id="form2" runat="server">
<div>
<h1>
Edit Dialog 3</h1>
<asp:Button ID="CloseButton" runat="server" Text="Close" OnClick="CloseButton_Click"
OnClientClick="$('#resultDiv').dialog('close'); return true;" />
</div>
</form>
如果我返回false,那么只需javascript OnClientClick触发并关闭对话框..按预期工作。如果我设置返回true,对话框会关闭,但这就是问题所在。主窗体消失,并被对话框形式替换..
我需要这个按钮来执行代码隐藏中的CloseButton_Click然后关闭对话框。我对asp.net和C#都很陌生,所以要温和你的回答......比如周
由于 安东尼
答案 0 :(得分:0)
发生的事情是,由于您的子表单(Edit3.aspx)正在回发到Web服务器,因此ASP.NET会发回Edit3.aspx的响应 - 而不是您的初始表单。为了实现您的目标,您必须使用异步回发到服务器。这可以通过将Edit3.aspx表单更改为以下内容来完成:
<form id="form2" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<div>
<h1 runat="server" id="edit3">
Edit Dialog 3</h1>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Button ID="CloseButton" runat="server" Text="Close" OnClientClick="$('#resultDiv').dialog('close'); return true;" />
</ContentTemplate>
</asp:UpdatePanel>
</div>
ScriptManager控件和UpdatePanel控件允许您的表单异步回发到服务器。