4

我有一个启动telerik radwindow 的父页面。每件事都运作良好。我的问题是当 radwindow 关闭时,父级重新加载。我不想要这个。我怎样才能关闭 radwin

Once the radwindow is done processeing the value, I need it to return it to the parent page, and I would like the parent page to have access to this value in my code behind page.

4

3 回答 3

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

}
于 2011-07-13T20:55:15.653 回答
2

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

看看这个

实际上 Telerik 在这些问题上的支持非常好(我见过的最好的支持之一),如果您在这里没有得到任何有利的信息,您应该在他们的论坛中发布您的问题。

于 2011-07-08T18:20:27.713 回答
0

正如 Bumble Bee 所说,您很可能有一个连接到 OnClientClose 的函数来提交页面,或者您正在从内容页面调用 GetRadWindow().BrowserWindol.location.reload() 之类的东西。

但是,您说您希望在父页面代码中具有该值。为此,您必须访问服务器。由于您不想重新加载页面,因此最简单的方法是使用 Ajax - 如果您使用的是 RadControls,则有一个RadAjaxManager可以帮助您完成此任务:)

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

于 2011-07-11T12:32:43.727 回答