如何关闭radwindow而不刷新父级

时间:2011-07-08 16:53:21

标签: asp.net telerik radwindow

我有一个启动telerik radwindow的父页面。一切都运作良好。我的问题是当radwindow关闭时,父母再次重新加载。我不想要这个。我怎么能关闭radwin

完成radwindow处理该值后,我需要它将其返回到父页面,我希望父页面能够在我的代码页面后面访问该值。

3 个答案:

答案 0 :(得分:3)

家长ASPX:

<telerik:RadWindowManager ID="RadWindowManager1" runat="server" DestroyOnClose="true" Width="750px" Height="500px" OnClientClose="onClientClose">
    <windows>
<telerik:RadWindow ID="RadWindow1" runat="server">
</telerik:RadWindow>
    </windows>
</telerik:RadWindowManager>
<%-- RadAjaxManager --%>
<telerik:RadAjaxManager ID="RadAjaxManager1" runat="server" OnAjaxRequest="RadAjaxManager1_AjaxRequest">
    <ajaxsettings>
<telerik:AjaxSetting AjaxControlID="RadAjaxManager1">
    <UpdatedControls>
<telerik:AjaxUpdatedControl ControlID="RadAjaxManager1" />
<telerik:AjaxUpdatedControl ControlID="RadGrid1" />
    </UpdatedControls>
</telerik:AjaxSetting>       
    </ajaxsettings>
</telerik:RadAjaxManager>

<telerik:RadCodeBlock ID="RadCodeBlock1" runat="server">

    <script type="text/javascript">

// Insert in RadWindow
function showForm(url) {
    window.radopen(url, "RadWindow1");
    return false;
}


function onClientClose(oWnd, args) {
    // get the transferred arguments
    var arg = args.get_argument();
    if (arg == '' || arg == null) {
// No need to refresh RadGrid
    }
    else {
$find("<%= RadAjaxManager1.ClientID %>").ajaxRequest(arg);
    }
}


    </script>

</telerik:RadCodeBlock>

家长代码:

protected void RadAjaxManager1_AjaxRequest(object sender, AjaxRequestEventArgs e)
{
    var result = Int32.Parse(e.Argument); // return argument from child
}

儿童ASPX

<telerik:RadCodeBlock ID="RadCodeBlock1" runat="server">

<script type="text/javascript">

    //mandatory for the RadWindow dialogs functionality
    function getRadWindow() {
    if (window.radWindow) {
        return window.radWindow;
    }
    if (window.frameElement && window.frameElement.radWindow) {
        return window.frameElement.radWindow;
    }
    return null;
    }

    // Fires when the changes are saved
    function onClientClose(arg) {
        // Pass the arguments from the dialog to the callback function on the main page.    
        getRadWindow().close(arg);
    }
    </script>

</telerik:RadCodeBlock>

儿童代码

protected void ChildSave_Click(object sender, EventArgs e)
{

    ClientScriptManager cs = Page.ClientScript;

    cs.RegisterStartupScript(typeof(Page), "CloseScript_" + UniqueID,
      "onClientClose('1');", true); // Return value 1 to parent

}

答案 1 :(得分:1)

您是否添加了OnClientClose javascript以从打开的窗口中获取控件?

只需检查this即可。

实际上,Telerik对这些事情(我见过的最好的事情之一)的支持相当不错,如果你在这里没有得到任何好处,你应该在他们的论坛上发帖。

答案 2 :(得分:0)

正如Bumble Bee所说,你很可能有一个挂钩OnClientClose的函数提交页面,或者你正在从内容页面调用GetRadWindow()。BrowserWindol.location.reload()。

但是,您说要在父页面代码中包含值。为此,您必须前往服务器。由于您不想重新加载页面,最简单的方法是使用Ajax - 如果您使用RadControls,则有RadAjaxManager可以帮助您完成此任务:)

您可以做的是在父页面上触发Ajax请求,该请求将使用RadAjaxManager的客户端API来触发Ajax请求,该请求将获取服务器上的数据。此demo中显示了与您的方案类似的方案。在其中,当RadWindow关闭时(在内容页面中),我们在父页面中调用JavaScript函数,该函数通过RadAjaxManager触发Ajax请求并重新绑定服务器上的网格 - 所有操作都是在没有回发的情况下完成的。 有关该主题的更多信息,请查看这些帮助文章: