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

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

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

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

}

Вы добавили JavaScript OnClientClose, чтобы получить элемент управления из открытого окна?

Просто проверьте это.

На самом деле поддержка Telerik в этих вопросах довольно хорошая (одна из лучших, которую я видел), и вы должны опубликовать свой вопрос на их форуме, если вы не получите ничего благоприятного здесь.

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

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

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

Другие вопросы по тегам