dev*_*per 1 ajax json telerik radgrid
尝试通过将 RadDock 放入 UpdatePanel 来更新它(打开/关闭它),但是没有运气....我收到以下回复。
189|error|500|Invalid JSON primitive: {"Top":179,"Left":583,"DockZoneID":"","Collapsed":false,"Pinned"
Run Code Online (Sandbox Code Playgroud)
: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>
Run Code Online (Sandbox Code Playgroud)
后面的代码:
protected void lbtnUpdate_Click(object sender, EventArgs e)
{
if (this.RadDock1.Closed)
this.RadDock1.Closed = false;
else
this.RadDock1.Closed = true;
}
Run Code Online (Sandbox Code Playgroud)
我在这里做错了什么?
更新:您的代码没有做错任何事情。我能够使用 UpdatePanel 和 RadAjaxManager 来复制这个问题。根据 Telerik 支持,这是 RadDock 控件中的“限制”。在我看来更像是一个错误。
这是他们在他们的支持页面论坛中所说的:克隆的非停靠码头加上无效的 JSON 原语
RadDock 控件不是标准控件,通过 ajax 更新时存在一些限制。如果您想通过 ajax 更新 RadDock,您应该更新所有 RadDockZones 并且所有 RadDocks 都应该停靠。
您遇到的错误是由于您使用 AJAX 更新了浮动 RadDock。拖动停靠栏时,您将其移到更新面板之外,这会导致 AJAX 无法正常工作,因为它会尝试在其先前所在的位置重新创建停靠栏。这样,页面上就会出现两个具有相同 id 的停靠点,这会导致异常。这是所有可以在 DOM 中移动的控件的常见问题。
我能够通过将 RadDock 包装在 RadDockZone 中并将 DockMode 属性设置为“停靠”来使您的代码工作。但是,如果我将 Dock 拖出区域,让它保持浮动状态并单击“更新”按钮,错误就会再次出现。
<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>
Run Code Online (Sandbox Code Playgroud)