【问题标题】:How to close the radwindow on serverside and refresh the parent page如何关闭服务器端的radwindow并刷新父页面
【发布时间】: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 窗口并刷新父窗口,该怎么做??

【问题讨论】:

    标签: c# javascript asp.net telerik radwindow


    【解决方案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,我试过了。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-15
    • 2013-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    相关资源
    最近更新 更多