关闭子模态表单后父页面回发的问题
issues with parent page postback after closing child modal form
我正在处理一个 ASP.NET 应用程序,但我 运行 遇到了一个我无法解决的问题。我有一个名为 Form1.aspx
的父表单,其中包含一个 Telerik RadGrid
。在页面加载时,这个网格完全是空的。用户可以通过单击添加来添加数据,在本例中会打开 Rad Window:这是我的代码:
<td >
<input id="btnAdd" runat="server" onclick="showQuestion4()"
type="button" value="Add" />
</td>
我的 RadWindowManager
是这样的:
<telerik:RadWindowManager ID="RequestsRadWindowManager" runat="server" >
<Windows>
<telerik:RadWindow ID="ClientQuestion4" runat="server" Behaviors="Close,Move"
EnableEmbeddedSkins="false" Height="300px" Modal="true" OnClientClose="OnClientClose"
ReloadOnShow="true" Skin="WebBlue" Width="550px">
</telerik:RadWindow>
</Windows>
</telerik:RadWindowManager>
而My JS函数实际打开window:
function showQuestion4() {
return window.radopen("mdClientQ4.aspx?mode=add", "ClientQuestion4", "return false;");
return false;
}
我的子表单可以正确打开,并允许用户输入和保存数据。用户单击“保存”后,我进行插入,然后调用它:
RadAjaxManager1.ResponseScripts.Add("cancelAndClose();")
对应这段JS代码:
function cancelAndClose() {
var oWnd = GetRadWindow();
oWnd.close();
}
function GetRadWindow() {
var oWindow = null;
if (window.radWindow) oWindow = window.radWindow;
elseif(window.frameElement.radWindow)oWindow=window.frameElement.radWindow;
return oWindow;
}
所以这段代码被调用,我的子窗体成功关闭,现在焦点 returns 到我在后台打开的父窗体。
这里发生的事情是,我在父表单上有一个整页 Post,我的主要目标是防止它。
我的 RadGrid
当前在更新面板中,还有 mode="conditional"
。此 Update Panel
的触发器是一个下拉菜单,它启用了 ADD 按钮,这又允许用户打开子表单并输入数据。
我已经尝试禁用此 postback
数小时但无济于事,我不知道我做错了什么。
我在 showQuestion4()
Javascript 函数中设置了 return false;
,但这仍然会被绕过,并且父页面已加载完整页面。
我的目标是关闭子窗体,并且不让 POST BACK 出现在我的父窗体中,而是我想简单地用 RadGrid 重新加载 UpdatePanel
这将显示用户在子表单中输入的信息。
任何帮助或提示将不胜感激。如有必要,我很乐意展示更多代码。
编辑:
根据下面的 Nikkis 评论,我从 btnAdd
中删除了 runat="server"
但是,我的父表单仍然通过回发
发布作为答案,因为看起来你从我们的评论对话中解决了这个问题。
检查 UpdatePanel,并确保在客户端关闭时调用的任何代码都按照您的意思触发。
我正在处理一个 ASP.NET 应用程序,但我 运行 遇到了一个我无法解决的问题。我有一个名为 Form1.aspx
的父表单,其中包含一个 Telerik RadGrid
。在页面加载时,这个网格完全是空的。用户可以通过单击添加来添加数据,在本例中会打开 Rad Window:这是我的代码:
<td >
<input id="btnAdd" runat="server" onclick="showQuestion4()"
type="button" value="Add" />
</td>
我的 RadWindowManager
是这样的:
<telerik:RadWindowManager ID="RequestsRadWindowManager" runat="server" >
<Windows>
<telerik:RadWindow ID="ClientQuestion4" runat="server" Behaviors="Close,Move"
EnableEmbeddedSkins="false" Height="300px" Modal="true" OnClientClose="OnClientClose"
ReloadOnShow="true" Skin="WebBlue" Width="550px">
</telerik:RadWindow>
</Windows>
</telerik:RadWindowManager>
而My JS函数实际打开window:
function showQuestion4() {
return window.radopen("mdClientQ4.aspx?mode=add", "ClientQuestion4", "return false;");
return false;
}
我的子表单可以正确打开,并允许用户输入和保存数据。用户单击“保存”后,我进行插入,然后调用它:
RadAjaxManager1.ResponseScripts.Add("cancelAndClose();")
对应这段JS代码:
function cancelAndClose() {
var oWnd = GetRadWindow();
oWnd.close();
}
function GetRadWindow() {
var oWindow = null;
if (window.radWindow) oWindow = window.radWindow;
elseif(window.frameElement.radWindow)oWindow=window.frameElement.radWindow;
return oWindow;
}
所以这段代码被调用,我的子窗体成功关闭,现在焦点 returns 到我在后台打开的父窗体。
这里发生的事情是,我在父表单上有一个整页 Post,我的主要目标是防止它。
我的 RadGrid
当前在更新面板中,还有 mode="conditional"
。此 Update Panel
的触发器是一个下拉菜单,它启用了 ADD 按钮,这又允许用户打开子表单并输入数据。
我已经尝试禁用此 postback
数小时但无济于事,我不知道我做错了什么。
我在 showQuestion4()
Javascript 函数中设置了 return false;
,但这仍然会被绕过,并且父页面已加载完整页面。
我的目标是关闭子窗体,并且不让 POST BACK 出现在我的父窗体中,而是我想简单地用 RadGrid 重新加载 UpdatePanel
这将显示用户在子表单中输入的信息。
任何帮助或提示将不胜感激。如有必要,我很乐意展示更多代码。
编辑:
根据下面的 Nikkis 评论,我从 btnAdd
中删除了 runat="server"
但是,我的父表单仍然通过回发
发布作为答案,因为看起来你从我们的评论对话中解决了这个问题。
检查 UpdatePanel,并确保在客户端关闭时调用的任何代码都按照您的意思触发。