Ajaxタブコントロールのあるページがあります。タブの1つに、Telerik RadGridとして別のWebコントロールを指す編集フォームを持つWebコントロールがあります。その編集フォームにはAjaxタブも含まれており、それらのタブの1つに、さらに別のWebコントロールのAjaxモーダルポップアップがあります。
最初のWebコントロールは、それ自体のページで使用すると正常に機能しますが、必要に応じてAjaxタブ内でコントロールを使用すると編集フォームが表示されません。スクリプトマネージャが次のエラーをスローしています。
Microsoft JScriptランタイムエラー:Sys.InvalidOperationException:ID'xxx 'のUpdatePanelが見つかりませんでした。動的に更新されている場合は、別のUpdatePanel内にある必要があります。
これに関する支援をいただければ幸いです。
この問題は、Telerik RadAjaxManagerに非表示のコントロールを追加すると、発生します。
したがって、AJAXコントロールを表示/非表示にする必要がある場合は、(コントロールの可視性の状態に基づいて)コードビハインドから文法的にAJAX設定を追加することをお勧めします)ASPXコードの代わりに。
詳細については: Telerikフォーラムでこの回答を確認してください。
このエラーがスクリプトに発生していると思います。更新パネルを表示/非表示にしている場合は、このエラーが発生します。私が知っている最善の解決策は、更新パネルを、表示/非表示にしている更新パネルの親となる他の更新パネルのコンテンツテンプレートに配置することです。
<asp:UpdatePanel ID="Panel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:UpdatePanel ID="Panel2" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Label ID="labwl1" runat="server" Text="Label">
</asp:Label>
</ContentTemplate>
</asp:UpdatePanel >
</ContentTemplate>
</asp:UpdatePanel >
これで、ID Panel2
の更新パネルを非表示にしても、エラーは発生しません。
トラブルシューティングから始めるために、私は個人的にコードの一部を削除して、エラーの理由を指定しようとします。たとえば、グリッドを削除し、タブクリックでユーザーコントロールを動的にロードして問題が残っているかどうかを確認してから、内側のajaxタブまたはモーダルポップアップを削除して、別のチェックを実行します。
ほとんどの場合-その更新パネルのコンテナ/親がtrRow
であり、trRow.Visible = false;
のようなコードのどこかにある場合、その更新パネルは検出されず、エラーがスローされます。
それは正しいです、私は私のコードが突然機能しなくなった理由を見つけるために2時間を無駄にしました...
削除したコードを少し整理しすぎて、更新パネルの終了を削除したことが判明しました...
<asp:UpdatePanel ID="submitupdatepanel" runat="server">
<ContentTemplate>
<div class="block" style="height: 60px; width: 400px;">
<div class="centered">
<asp:LinkButton ID="submitbutton" runat="server" CssClass="button_red2 " Text=" <span>Submit </span>">
</asp:LinkButton>
<asp:LinkButton ID="cancelbutton" runat="server" CssClass="button_gray2 " Text=" <span>Cancel</span>" Visible="false" OnClientClick="window.close()">
</asp:LinkButton>
</div>
</ContentTemplate>
</asp:UpdatePanel>
<br />
<div style='display: none'>
<asp:UpdatePanel runat="server">
<ContentTemplate>
<asp:PlaceHolder ID="myhiddenpopups2" runat="server" Visible="true"></asp:PlaceHolder>
</ContentTemplate>
</asp:UpdatePanel>
</div>
次に、その下の非表示のupdatepanel部分でこれと同じエラーが発生しました。
行方不明者を元に戻した後、アルは通常の状態に戻りました
<asp:UpdatePanel ID="submitupdatepanel" runat="server">
<ContentTemplate>
<div class="block" style="height: 60px; width: 400px;">
<div class="centered">
<asp:LinkButton ID="submitbutton" runat="server" CssClass="button_red2 " Text=" <span>Submit </span>">
</asp:LinkButton>
<asp:LinkButton ID="cancelbutton" runat="server" CssClass="button_gray2 " Text=" <span>Cancel</span>" Visible="false" OnClientClick="window.close()">
</asp:LinkButton>
</div>
</div>
</ContentTemplate>
</asp:UpdatePanel>
<br />
<div style='display: none'>
<asp:UpdatePanel runat="server">
<ContentTemplate>
<asp:PlaceHolder ID="myhiddenpopups2" runat="server" Visible="true"></asp:PlaceHolder>
</ContentTemplate>
</asp:UpdatePanel>
</div>
それが誰かに役立つことを願っています。 K
私の場合、ページに2つの更新パネルがありましたが、IDを持っているのはそのうちの1つだけでした。もう一方のIDを設定すると、エラーが解決しました。
WebControlを含む初期タブのUpdatePanelを削除することで、問題を解決しました。なぜこれが問題を引き起こしたのかはわかりませんが、誰かがそれを説明できれば、私は知りたいと思います。
だから、例えば、私はもともとこれを持っていました:
<cc1:TabContainer ID="TabContainer1" runat="server" ActiveTabIndex="0" OnClientActiveTabChanged="TabContainer1_OnChanged" Visible="true" >
<cc1:TabPanel runat="server" ID="TabPriorities">
<HeaderTemplate>Manage Prioritys</HeaderTemplate>
<ContentTemplate>
<asp:UpdatePanel ID="UpdatePanelPriorities" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<uc1:PriorityGrid ID="PriorityGrid1" runat="server" />
</ContentTemplate>
</asp:UpdatePanel>
</ContentTemplate>
</cc1:TabPanel>
そして私はそれを次のように変更しました:
<cc1:TabContainer ID="TabContainer1" runat="server" ActiveTabIndex="0" OnClientActiveTabChanged="TabContainer1_OnChanged" Visible="true" >
<cc1:TabPanel runat="server" ID="TabPriorities">
<HeaderTemplate>Manage Prioritys</HeaderTemplate>
<ContentTemplate>
<uc1:PriorityGrid ID="PriorityGrid1" runat="server" />
</ContentTemplate>
</cc1:TabPanel>
そしてそれは、ajaxタブとモーダルポップアップも含むユーザーコントロールから出てくるスクリプトエラーを解決しました。
編集:UpdateMode = "Conditional"の更新パネルで作業しているときに発見したいくつかの新しいことに基づいて、回答を修正したいと思います。
これは、上記のエラーが発生するというOPの問題に対処するためのコンテキストです。
私のシナリオは、いくつかのネストされた子更新パネルを持つ親更新パネルがあることです。
<asp:UpdatePanel ID="upParent" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<%-- Header Content --%>
<asp:UpdatePanel ID="upChild1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<%-- Child1 Content --%>
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel ID="upChild2" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<%-- Child2 Content --%>
</ContentTemplate>
</asp:UpdatePanel>
<asp:Button ID="btnEditMode" runat="server" Text="Edit" OnClick="btnEditMode_Click"></asp:Button>
</ContentTemplate>
</asp:UpdatePanel>
[編集]ボタンで両方の子更新パネルのコンテンツを変更し、問題を発生させずに親更新パネル全体を更新するには、非同期ポストバックの実行を検討することをお勧めします。
<asp:UpdatePanel ID="upParent" runat="server" UpdateMode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnEditMode" EventName="Click" />
</Triggers>
<ContentTemplate>
<%-- Header Content --%>
<asp:UpdatePanel ID="upChild1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<%-- Child1 Content --%>
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel ID="upChild2" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<%-- Child2 Content --%>
</ContentTemplate>
</asp:UpdatePanel>
<asp:Button ID="btnEditMode" runat="server" Text="Edit" OnClick="btnEditMode_Click"></asp:Button>
</ContentTemplate>
</asp:UpdatePanel>
これは私にとってはうまくいきます、私はもう上記の(OPの)エラーを受け取りません。興味深いことに、OPのシナリオとほぼ同じように、私はAjaxタブコントロールを使用しており、各タブには子更新パネルが含まれていました。これは、まったく同じエラーメッセージが表示され、非同期ポストバックトリガーを追加することで解決した場所です。
これは、閉じられていないタグまたは終了タグがないことが原因である可能性があります。
私のページにはいくつかの更新パネルが含まれています。これらすべてが表示され、display:noneがないことを確認して、このエラーを修正しました。
ページのソースを表示し、エラーが表示しているIDを検索することで、エラーの原因となっているパネルを見つけることができます。