Telerik RadDock-ajax更新はJSONエラーを返します
質問
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;
}
ここで何が間違っているのですか?
解決
更新:コードに何も問題はありません。 UpdatePanelとRadAjaxManagerの両方を使用して、この問題を再現することができました。 Telerikのサポートによると、これは「制限」です。 RadDockコントロール内。私の意見ではバグのようです。
サポートページフォーラムの内容は次のとおりです。クローン化された非ドッキングドックと無効なJSONプリミティブ
RadDockコントロールは標準ではありません 制御し、いくつかの制限があります ajaxを介して更新されたとき。もし、あんたが ajax経由でRadDockを更新したい すべてのRadDockZonesとすべてを更新する必要があります RadDocksをドッキングする必要があります。
発生するエラーの原因は フローティングRadDockを更新すること AJAXで。ドックをドラッグすると 更新パネルの外に移動し、 これにより、AJAXが正しく機能しなくなります でドックを再作成しようとします 以前に配置された場所。 このようにして、同じIDを持つ2つのドック ページに表示され、これにより 例外。これはよくある問題です 移動できるすべてのコントロール DOMで。
RadDockZone内にRadDockをラップし、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>
他のヒント
RadDockLayout内にいくつかのRadDocksがあります。 RadDock、RadDockLayout、またはRadAjaxManagerオブジェクトを介してRadDockLayoutをラップするメインパネルを更新すると、Ajaxが機能します。
例:
<telerik:AjaxSetting AjaxControlID="RadAjaxManager1">
<UpdatedControls>
<telerik:AjaxUpdatedControl ControlID="mainPanel" />
</UpdatedControls>
</telerik:AjaxSetting>