Telerik RadDock - la actualización ajax devuelve un error JSON
Pregunta
Intento actualizar RadDock (abrirlo / cerrarlo) poniéndolo en UpdatePanel, sin embargo, no tuve suerte ... Recibo la siguiente respuesta.
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} . |
Aquí está el 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 detrás:
protected void lbtnUpdate_Click(object sender, EventArgs e)
{
if (this.RadDock1.Closed)
this.RadDock1.Closed = false;
else
this.RadDock1.Closed = true;
}
¿Qué estoy haciendo mal aquí?
Solución
ACTUALIZACIÓN: no estás haciendo nada incorrecto en tu código. Pude duplicar este problema utilizando UpdatePanel y RadAjaxManager. Según el soporte de Telerik, esta es una "limitación". en el control RadDock. Más como un error en mi opinión.
Esto es lo que dice en su Foro de la página de soporte: Docks no acoplados clonados más primitiva JSON no válida
El control RadDock no es un estándar control y hay algunas limitaciones cuando se actualiza a través de ajax. Si tu desea actualizar un RadDock a través de ajax usted debe actualizar todos los RadDockZones y todos RadDocks debe estar acoplado.
El error que experimenta se debe a que actualice un RadDock flotante con AJAX Al arrastrar el muelle te moverlo fuera del panel de actualización y esto hace que AJAX no funcione correctamente ya que intenta recrear el muelle en el lugar en el que se encontraba anteriormente. De esta forma dos muelles con la misma id. aparecer en la página y esto lleva a una excepción. Este es un problema común para todos los controles que se pueden mover en el DOM.
Pude hacer que tu código funcionara envolviendo RadDock dentro de RadDockZone y configurando la propiedad DockMode en "Docked". Sin embargo, si arrastro el dock fuera de la zona, lo dejo flotando y hago clic en " Actualizar " botón, el error vuelve a aparecer.
<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>
Otros consejos
Tengo un par de RadDocks flotando dentro de un RadDockLayout. Ajax funciona si actualizo RadDock, RadDockLayout o el panel principal que envuelve RadDockLayout a través del objeto RadAjaxManager.
Ej:
<telerik:AjaxSetting AjaxControlID="RadAjaxManager1">
<UpdatedControls>
<telerik:AjaxUpdatedControl ControlID="mainPanel" />
</UpdatedControls>
</telerik:AjaxSetting>