如何关闭服务器端的radwindow并刷新父页面
Posted
技术标签:
【中文标题】如何关闭服务器端的radwindow并刷新父页面【英文标题】:How to close the radwindow on serverside and refresh the parent page 【发布时间】:2013-03-16 10:32:23 【问题描述】:我想关闭RadWindow 并刷新父级:如何做这个服务器端:
我有以下情况:
两页说:
parent.aspx:
<telerik:RadWindowManager ID="RadWindowManager1" runat="server" EnableViewState ="false">
</telerik:RadWindowManager>
和parent.cs
protected void OpenNewWindow(string url, int width, int height,int mode)
RadWindow newWindow = new RadWindow();
newWindow.NavigateUrl = url;
newWindow.VisibleOnPageLoad = true;
newWindow.KeepInScreenBounds = true;
if (width > 0)
newWindow.Width = width;
if (height > 0)
newWindow.Height = height;
newWindow.VisibleStatusbar = false;
if (mode == 0)
newWindow.DestroyOnClose = true;
newWindow.InitialBehaviors = WindowBehaviors.Maximize;
RadWindowManager1.Windows.Add(newWindow);
我在我的父页面上的某些 gridview 的 rowcommand 中调用此方法:
像这样:
OpenNewWindow("child.aspx", 0, 0,0);
现在我想在服务器端单击child
页面上某个按钮的事件来关闭 rad 窗口并刷新父窗口,该怎么做??
【问题讨论】:
【参考方案1】:正如你所说,你想从后面的代码中关闭。所以你可以从后面的代码中渲染Page.ClientScript.RegisterClientScriptBlock(GetType(), "CloseScript", "refreshParentPage()", true);
来刷新父级。
只需在子页面中添加以下代码和脚本。父页面不需要代码。
<script>
function getRadWindow()
var oWindow = null;
if (window.radWindow)
oWindow = window.radWindow;
else if (window.frameElement.radWindow)
oWindow = window.frameElement.radWindow;
return oWindow;
// Reload parent page
function refreshParentPage()
getRadWindow().BrowserWindow.location.reload();
</script>
<asp:Button runat="server" Text="Close" ID="CloseButton"
OnClick="CloseButton_Click"/>
protected void CloseButton_Click(object sender, EventArgs e)
Page.ClientScript.RegisterClientScriptBlock(GetType(),
"CloseScript", "refreshParentPage()", true);
更新:
// Redirect page page to url
function redirectParentPage(url)
getRadWindow().BrowserWindow.document.location.href = url;
// Code behind
Page.ClientScript.RegisterClientScriptBlock(GetType(),
"CloseScript", "redirectParentPage('Parent.aspx')", true);
【讨论】:
我从 Firefox 收到以下消息:To display this page, Firefox must send information that will repeat any action (such as a search or order confirmation) that was performed earlier.
您的父页面之前已发回服务器。如果是这样,您需要确保在用户打开子 RadWindow 之前未回发父页面。或者使用 更新的代码 将父页面重定向到自身而不是重新加载。【参考方案2】:
您应该使用getRadWindow().close()
方法和OnClientClose
事件。
在 Child.aspx 上:
<script type="text/javascript">
function getRadWindow()
var oWindow = null;
if (window.radWindow)
oWindow = window.radWindow;
else if (window.frameElement.radWindow)
oWindow = window.frameElement.radWindow;
return oWindow;
function clientClose(arg)
getRadWindow().close(arg);
</script>
在 Child.cs 中:
protected void btn_Click(object sender, EventArgs e)
ScriptManager.RegisterStartupScript(Page, typeof(Page), "closeScript", "clientClose('');", true);
在 Parent.cs 中创建 RadWindow 时,添加 OnClientClose
事件:newWindow.OnClientClose = "OnChildWindowClosed";
。
在 Parent.aspx 上:
<script type="text/javascript">
function OnChildWindowClosed(sender, eventArgs)
document.location.reload(); // there may be a cleaner way to do the refresh
</script>
【讨论】:
我从 Firefox 收到以下消息:To display this page, Firefox must send information that will repeat any action (such as a search or order confirmation) that was performed earlier.
window.location.reload() 尝试再次执行最后一次回发,您无法阻止。改用 window.location.href = window.location.href。它通常会起作用,除非您在 URL 中有哈希。
我相信这是更好的方法,因为它会触发并使用 RadWindow 控件的OnClientClose
事件。要解决重新加载问题,请使用上面@Win 答案更新中的函数redirectParentPage
。使用getRadWindow().close(arg);
将参数传递给函数OnChildWindowClosed
并与window.location.href = eventArgs.get_argument();
一起使用【参考方案3】:
强制关闭 rad 窗口的简单方法,只需将其放在更新面板中即可:
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" RenderMode="Block">
<ContentTemplate>
<telerik:RadWindow ID="RadWindow1" runat="server">
<ContentTemplate>
</ContentTemplate>
</telerik:RadWindow>
</ContentTemplate>
</asp:UpdatePanel>
重要提示:您必须将此属性应用到更新面板:
UpdateMode="Conditional" RenderMode="Block"
然后在你要执行的按钮里面执行关闭命令:
UpdatePanel1.update()
此命令将关闭 radwindow 并且不会刷新您的网页,也不需要 javascript,我试过了。
【讨论】:
除非您了解它为什么有效,为什么它是一个坏主意以及它可能导致什么问题,否则不要这样做。先回顾这篇文章:docs.telerik.com/devtools/aspnet-ajax/controls/window/how-to/…以上是关于如何关闭服务器端的radwindow并刷新父页面的主要内容,如果未能解决你的问题,请参考以下文章
怎么点击确定按钮关闭当前窗口,并返回父页面,并且父页面刷新。