как закрыть radwindow без обновления родителя

У меня есть родительская страница, которая запускает телерик radwindow. Все работает хорошо. Моя проблема заключается в том, что когда radwindow закрывается, родитель снова перезагружается. Я не хочу этого. как я могу закрыть радвин

Как только radwindow завершит обработку значения, мне нужно, чтобы оно вернуло его на родительскую страницу, и я хотел бы, чтобы родительская страница имела доступ к этому значению на моей странице кода позади.


person Azi    schedule 08.07.2011    source источник


Ответы (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

}
person Win    schedule 13.07.2011


Как сказал Bumble Bee, у вас, скорее всего, есть либо функция, подключенная к OnClientClose, которая отправляет страницу, либо вы вызываете что-то вроде GetRadWindow().BrowserWindol.location.reload() со страницы содержимого.

Однако вы говорите, что хотите иметь значение в коде родительской страницы позади. Для этого вам придется совершить поездку на сервер. Поскольку вы не хотите перезагружать страницу, проще всего это сделать с помощью Ajax, а если вы используете RadControls, есть RadAjaxManager, чтобы помочь вам в этой задаче :)

Что вы можете сделать, так это запустить запрос Ajax на родительской странице, который будет использовать клиентский API RadAjaxManager для запуска запроса Ajax, который доставит вам данные на сервере. Сценарий, аналогичный вашему, показан в этом демо. В нем при закрытии RadWindow (на странице содержимого) мы вызываем функцию JavaScript на родительской странице, которая запускает Ajax-запрос через RadAjaxManager и перепривязывает сетку на сервере — все делается без постбэков. Дополнительные сведения по этому вопросу см. в этих справочных статьях:

person GeorgiTunev    schedule 11.07.2011