Telerik RadDock - l'aggiornamento ajax restituisce un errore JSON
Domanda
Sto provando ad aggiornare RadDock (aprendolo / chiudendolo) mettendolo in UpdatePanel ma senza fortuna .... Sto ottenendo la seguente risposta.
189|error|500|Invalid JSON primitive: {"Top":179,"Left":583,"DockZoneID":"","Collapsed":false,"Pinned"
: false, " ridimensionabile ": false, " chiusa ": false, " Larghezza ": " 300px ", " altezza ": null, " ExpandedHeight ": 0, " Indice ": - 1} . |
Ecco il codice:
<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>
Codice dietro:
protected void lbtnUpdate_Click(object sender, EventArgs e)
{
if (this.RadDock1.Closed)
this.RadDock1.Closed = false;
else
this.RadDock1.Closed = true;
}
Cosa sto facendo di sbagliato qui?
Soluzione
AGGIORNAMENTO: non stai facendo nulla di sbagliato nel tuo codice. Sono stato in grado di duplicare questo problema utilizzando sia UpdatePanel che RadAjaxManager. Secondo il supporto di Telerik, questa è una "limitazione" nel controllo RadDock. Più come un bug secondo me.
Ecco cosa dice nel forum della pagina di supporto: Docks non ancorati clonati più primitiva JSON non valida
Il controllo RadDock non è uno standard controllo e ci sono alcune limitazioni quando viene aggiornato tramite Ajax. Se tu vuoi aggiornare un RadDock tramite Ajax dovrebbe aggiornare tutte le RadDockZones e tutte RadDocks dovrebbe essere ancorato.
L'errore che si verifica è dovuto che aggiorni un RadDock mobile con AJAX. Quando trascini il dock tu spostarlo al di fuori del pannello di aggiornamento e questo fa sì che AJAX non funzioni correttamente mentre tenta di ricreare il dock in il luogo in cui si trovava in precedenza. In questo modo due dock con lo stesso ID appare sulla pagina e questo porta a un'eccezione. Questo è un problema comune per tutti i controlli che potrebbero essere spostati nel DOM.
Sono stato in grado di far funzionare il tuo codice avvolgendo RadDock all'interno di RadDockZone e impostando la proprietà DockMode su " Docked " ;. Se, tuttavia, trascino il dock fuori dalla zona, lo lascio mobile e faccio clic su " Aggiorna " pulsante, ricompare l'errore.
<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>
Altri suggerimenti
Ho un paio di RadDock galleggianti all'interno di un RadDockLayout. Ajax funziona se aggiorno RadDock, RadDockLayout o il pannello principale che avvolge RadDockLayout tramite l'oggetto RadAjaxManager.
Esempio:
<telerik:AjaxSetting AjaxControlID="RadAjaxManager1">
<UpdatedControls>
<telerik:AjaxUpdatedControl ControlID="mainPanel" />
</UpdatedControls>
</telerik:AjaxSetting>