Telerik RadDock - atualização ajax retorna um erro de JSON
Pergunta
Tentando atualizar RadDock (abrir / fechar-lo), colocando-o em UpdatePanel porém sem sorte .... eu estou recebendo a seguinte resposta.
189|error|500|Invalid JSON primitive: {"Top":179,"Left":583,"DockZoneID":"","Collapsed":false,"Pinned"
: false, "Resizable": false, "fechado": false, "largura": "300px", "altura": null, "expandedHeight": 0, "Index": - 1} . |
Aqui está o código:
<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>
código por trás:
protected void lbtnUpdate_Click(object sender, EventArgs e)
{
if (this.RadDock1.Closed)
this.RadDock1.Closed = false;
else
this.RadDock1.Closed = true;
}
O que estou fazendo de errado aqui?
Solução
UPDATE: Você não está fazendo errado nada em seu código. Eu era capaz de duplicar este problema usando tanto UpdatePanel e RadAjaxManager. De acordo com suporte Telerik, esta é uma "limitação" no controle RadDock. Mais como um erro na minha opinião.
Aqui está o que diz em seu Fórum Página de suporte: não-ancorado docas clonado mais inválido JSON primitivo
O controle RadDock não é um padrão controlar e existem algumas limitações quando ele é atualizado via ajax. Se vocês deseja atualizar uma RadDock via ajax você deve atualizar todos os RadDockZones e tudo RadDocks deve ser encaixado.
O erro que você experiência é devido a que você atualizar um RadDock flutuante com AJAX. Ao arrastar a ancorar mover-se para fora do painel e a actualização isso faz com que AJAX não está funcionando corretamente uma vez que as tentativas para recriar o cais o lugar foi localizado anteriormente. Desta forma duas docas, com o mesmo id aparecer na página e isso leva a uma exceção. Esse é um problema comum para todos os comandos que podem ser movidas no DOM.
Eu era capaz de fazer o seu trabalho de código envolvendo a RadDock dentro de um RadDockZone e definindo a propriedade DockMode para "ancorado". Se, no entanto, eu arrastar a doca fora da zona, deixá-lo flutuando e clique no botão "Update", ao reaparecimento de erro.
<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>
Outras dicas
Eu tenho um par RadDocks flutuando dentro de um RadDockLayout. Ajax funciona se eu atualizar o RadDock, o RadDockLayout, ou o painel principal que envolve o RadDockLayout através do objeto RadAjaxManager.
Ex:
<telerik:AjaxSetting AjaxControlID="RadAjaxManager1">
<UpdatedControls>
<telerik:AjaxUpdatedControl ControlID="mainPanel" />
</UpdatedControls>
</telerik:AjaxSetting>