Как закрыть radwindow на стороне сервера и обновить родительскую страницу
Я хочу закрыть 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);
}
я вызываю этот метод в rowcommand некоторого gridview на моей родительской странице:
как это:
OpenNewWindow("child.aspx", 0, 0,0);
Теперь я хочу, чтобы на стороне сервера происходило нажатие некоторой кнопки на child
страница, чтобы закрыть окно Rad и обновить родительский, как это сделать??
3 ответа
Как вы сказали, вы хотите закрыть из кода позади. Таким образом, вы можете сделать 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);
Вы должны использовать 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);
}
При создании вашего RadWindow в Parent.cs, добавьте 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>
Простой способ принудительно закрыть окно 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 = "Условный" RenderMode="Блок"
Затем внутри кнопки, которую вы хотите выполнить команду закрытия, выполните:
UpdatePanel1.update()
эта команда закроет radwindow и не обновит вашу веб-страницу, и не нужно javascript, я попробовал.