как закрыть radwindow без обновления родительского - PullRequest
3 голосов
/ 08 июля 2011

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

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

Ответы [ 3 ]

3 голосов
/ 14 июля 2011

Родительский 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 голос
/ 08 июля 2011

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

Просто отметьте это .

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

0 голосов
/ 11 июля 2011

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

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

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

...