【问题标题】:Telerik RadDock - ajax update returns a JSON errorTelerik RadDock - ajax 更新返回 JSON 错误
【发布时间】:2010-10-22 16:43:48
【问题描述】:

尝试通过将 RadDock 放在 UpdatePanel 中来更新(打开/关闭它)但是没有运气......我收到以下响应。

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

:false,"Resizable":false,"Closed":false,"Width":"300px","Height":null,"ExpandedHeight":0,"Index":-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;
}

我在这里做错了什么?

【问题讨论】:

    标签: ajax json telerik radgrid


    【解决方案1】:

    更新:您的代码没有做错任何事情。我能够使用 UpdatePanel 和 RadAjaxManager 复制这个问题。根据 Telerik 支持,这是 RadDock 控件中的“限制”。在我看来更像是一个错误。

    这是他们的支持页面论坛中所说的:Non-docked Docks cloned plus Invalid JSON primitive

    RadDock 控件不是标准的 控制和有一些限制 当它通过ajax更新时。如果你 想通过 ajax 更新一个 RadDock 你 应该更新所有 RadDockZones 和所有 RadDocks 应该停靠。

    您遇到的错误是由于 你更新一个浮动的 RadDock 与 AJAX。拖动停靠栏时,您 将其移出更新面板并 这会导致 AJAX 无法正常工作 因为它试图在 它以前所在的地方。 这样两个相同id的dock 出现在页面上,这导致 一个例外。这是一个常见的问题 对于所有可以移动的控件 在 DOM 中。

    通过将 RadDock 包装在 RadDockZone 中并将 DockMode 属性设置为“Docked”,我能够使您的代码正常工作。但是,如果我将扩展坞拖出该区域,将其悬空并单击“更新”按钮,则会再次出现错误。

    <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>
    

    【讨论】:

    • 我相信我使用 Telerik 的 AjaxManager 进行了尝试并得到了相同的响应。
    • @dev.e.loper - 请阅读我更新的帖子。事实证明,您需要将 RadDock 包装在 RadZone 中,然后它只能在停靠时工作,而不是浮动。
    【解决方案2】:

    我有几个 RadDocks 漂浮在 RadDockLayout 中。如果我通过 RadAjaxManager 对象更新 RadDock、RadDockLayout 或包装 RadDockLayout 的主面板,Ajax 就可以工作。

    例如:

    <telerik:AjaxSetting AjaxControlID="RadAjaxManager1">
        <UpdatedControls>
            <telerik:AjaxUpdatedControl ControlID="mainPanel" />
        </UpdatedControls>
    </telerik:AjaxSetting>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-25
      • 2021-04-23
      相关资源
      最近更新 更多