Telerik RadDock - обновление ajax возвращает ошибку JSON

StackOverflow https://stackoverflow.com/questions/804200

  •  03-07-2019
  •  | 
  •  

Вопрос

Пытаюсь обновить RadDock (открыть / закрыть его), поместив его в UpdatePanel, однако безуспешно....Я получаю следующий ответ.

189|error|500|Invalid JSON primitive: {"Top":179,"Left":583,"DockZoneID":"","Collapsed":false,"Pinned"

:false, "Изменяемый размер":false, "Закрытый":false, "Ширина": "300 пикселей", "Высота": null, "Расширенная высота":0, "Индекс":-1} .|

Вот этот код:

<asp:UpdatePanel ID="upanelDock" runat="server">
    <ContentTemplate>
        <telerik:RadDock ID="RadDock1" runat="server" Width="300px">
            <TitlebarTemplate>
                <h2>
                    this is a dock</h2>
            </TitlebarTemplate>
            <ContentTemplate>
                some content here
                <br />
                some content here
                <br />
                some content here
                <br />               
            </ContentTemplate>
        </telerik:RadDock>
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="lbtnUpdate" EventName="Click" />
    </Triggers>
</asp:UpdatePanel>
<asp:LinkButton ID="lbtnUpdate" runat="server" OnClick="lbtnUpdate_Click">update</asp:LinkButton>

Код, стоящий за:

    protected void lbtnUpdate_Click(object sender, EventArgs e)
{

    if (this.RadDock1.Closed)
        this.RadDock1.Closed = false;
    else
        this.RadDock1.Closed = true;
}

Что я здесь делаю не так?

Это было полезно?

Решение

Обновить: Вы не делаете ничего неправильного в своем коде.Я смог дублировать эту проблему, используя как UpdatePanel, так и RadAjaxManager.Согласно службе поддержки Telerik, это "ограничение" в элементе управления RadDock.На мой взгляд, больше похоже на ошибку.

Вот что написано на их Странице поддержки Forum: Клонированные не закрепленные доки плюс недопустимый примитив JSON

Элемент управления RadDock не является стандартным Элемент управления имеет некоторые ограничения когда он обновляется через ajax.Если вы хотите обновить RadDock через ajax, вам следует обновить все зоны RadDock и все RadDocks должны быть закреплены.

Ошибка, с которой вы сталкиваетесь, связана с тем, что вы обновляете плавающий RadDock с помощью AJAX.Перетаскивая док-станцию, вы перемещаете ее за пределы панели обновления, и это приводит к тому, что AJAX не работает должным образом поскольку он пытается воссоздать док-станцию в том месте, где она была расположена ранее.Таким образом, на странице появляются два дока с одинаковым идентификатором , что приводит к исключению.Это общая проблема для всех элементов управления, которые могут быть перемещены в DOM.

Я смог заставить ваш код работать, обернув RadDock внутри RadDockZone и установив для свойства DockMode значение "Закреплено".Однако, если я перетаскиваю док-станцию из зоны, оставляю ее плавающей и нажимаю кнопку "Обновить", ошибка появляется снова.

<asp:UpdatePanel ID="upanelDock" runat="server">
    <ContentTemplate>
       <telerik:RadDockZone runat="server">
        <telerik:RadDock ID="RadDock1" runat="server" Width="300px" 
                                                      DockMode="Docked">
            <TitlebarTemplate>
                <h2>
                    this is a dock
                </h2>
            </TitlebarTemplate>
            <ContentTemplate>
                some content here
                <br />
                some content here
                <br />
                some content here
                <br />               
            </ContentTemplate>
        </telerik:RadDock>
      </telerik:RadDockZone>
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="lbtnUpdate" EventName="Click" />
    </Triggers>
</asp:UpdatePanel>
<asp:LinkButton ID="lbtnUpdate" runat="server"
           OnClick="lbtnUpdate_Click">update</asp:LinkButton>

Другие советы

У меня есть пара RadDocks, плавающих внутри RadDockLayout.Ajax работает, если я обновляю RadDock, RadDockLayout или главную панель, которая переносит RadDockLayout через объект RadAjaxManager.

Бывший:

<telerik:AjaxSetting AjaxControlID="RadAjaxManager1">
    <UpdatedControls>
        <telerik:AjaxUpdatedControl ControlID="mainPanel" />
    </UpdatedControls>
</telerik:AjaxSetting>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top