はじめに: Anthem は、ASP.NET 1.1、2.0 をサポートする便利な Ajax フレームワークです。
このフレームワークのすべてのコントロールは ASP.NET 独自のサーバー コントロールを継承するため、これらのコントロールのプロパティと動作のほとんどすべてが保持されます (PostBack を CallBack の非リフレッシュ呼び出しに変更する場合を除く)。したがって、学習曲線は非常に緩やかです。
今日、Anthem を使用しているときに厄介なデバッグの問題に遭遇しました。これをここに記録します。
以下のコードでは、Anthem.Repeater コントロールを使用します。
<asp:XmlDataSource ID="XmlDataSource2" runat="server" XPath="//NeedDocs/Doc"
EnableCaching="false"></asp:XmlDataSource>
<table class="mytable" width="100%" cellpacing="0" cellpadding="0">
<anthem:Repeater ID="rptNeedDocs" runat="server" DataSourceID="XmlDataSource2"
AutoUpdateAfterCallBack="False">
<ヘッダーテンプレート>
<tr class="formTitle">
<td>
選択</td>
<td>
ファイル名と図面名</td>
<td>
送信する必要があります</td>
<td>
オリジナルですか?</td>
<td>
備考</td>
</tr>
</HeaderTemplate>
<アイテムテンプレート>
<tr>
<td>
<asp:CheckBox ID="chkDoc" runat="server" Checked="True" />
<asp:HiddenField ID="hidDocId" runat="server" Value='<%# XPath("@Id") %>' />
</td>
<td>
<asp:Label ID="lblDocName" runat="server" Text='<%# XPath("@Name") %>' />
</td>
<td>
<asp:TextBox ID="txtquant" runat="server" Text='<%# XPath("@quant") %>' width="30" />
</td>
<td>
<asp:RadioButtonList ID="radiolist_IsOriginal" runat="server" SelectedValue='<%# XPath("@IsOriginal") %>'
繰り返し方向="水平">
<asp:ListItem Value="True">オリジナル</asp:ListItem>
<asp:ListItem Value="False">コピー</asp:ListItem>
</asp:ラジオボタンリスト>
</td>
<td>
<asp:TextBox ID="txtComment" runat="server" Text='<%# XPath("Comment") %>' />
</td>
</tr>
</ItemTemplate>
<フッターテンプレート>
</フッターテンプレート>
</anthem:リピーター>
</テーブル>
このコードを実行すると、「不明なランタイム エラー」という JS エラーが発生することがあります。
また、このエラーは特定の状況でのみ発生し、他の同様の状況では正常です。
幸いなことに、VS 2005 は非常に強力なクライアント側スクリプト デバッグ機能を提供します。私は最終的に、Anthem によって生成されたコード行にエラーがあることを特定しました。
control.innerHTML = result.controls[コントロールID];
関連情報を確認したところ、IEではinnerHTML属性に値を代入する際に、代入された値がチェックされることが分かりました。適切な形式でない場合、「不明なランタイム エラー」が発生する可能性があります。
そこで、anthem.Repeaterが出力したHTMLに何か問題があると判断しました。上記のコードで強調表示されている 2 行からわかるように、テーブル ラベルはリピーターの外側にあります。したがって、リピーター自体は、全体が整形式ではなく、一連の tr を出力します。
そこで、テーブルタグの先頭と末尾をそれぞれRepeaterのHeaderTemplateとFooterTemplateに配置したところ、問題は解決しました。
(以前 table タグを外に置いたのは、HeaderTemplate と FooterTemplate 内に置いたときに、VS デザイナーがデザイン ビューに切り替えられなかった理由がわかりません。このように変更すると問題が解決します。 )
変更が成功すると、コードは次のようになります。
<asp:XmlDataSource ID="XmlDataSource2" runat="server" XPath="//NeedDocs/Doc"
EnableCaching="false"></asp:XmlDataSource>
<anthem:Repeater ID="rptNeedDocs" runat="server" DataSourceID="XmlDataSource2" AutoUpdateAfterCallBack="False">
<ヘッダーテンプレート>
<table class="mytable" width="100%" cellpacing="0" cellpadding="0">
<tr class="formTitle">
<td>
選択</td>
<td>
ファイル名と図面名</td>
<td>
送信する必要があります</td>
<td>
オリジナルですか?</td>
<td>
備考</td>
</tr>
</HeaderTemplate>
<アイテムテンプレート>
<tr>
<td>
<asp:CheckBox ID="chkDoc" runat="server" Checked="True" />
<asp:HiddenField ID="hidDocId" runat="server" Value='<%# XPath("@Id") %>' />
</td>
<td>
<asp:Label ID="lblDocName" runat="server" Text='<%# XPath("@Name") %>' />
</td>
<td>
<asp:TextBox ID="txtquant" runat="server" Text='<%# XPath("@quant") %>' width="30" />
</td>
<td>
<asp:RadioButtonList ID="radiolist_IsOriginal" runat="server" SelectedValue='<%# XPath("@IsOriginal") %>'
繰り返し方向="水平">
<asp:ListItem Value="True">オリジナル</asp:ListItem>
<asp:ListItem Value="False">コピー</asp:ListItem>
</asp:ラジオボタンリスト>
</td>
<td>
<asp:TextBox ID="txtComment" runat="server" Text='<%# XPath("Comment") %>' />
</td>
</tr>
</ItemTemplate>
<フッターテンプレート>
</テーブル>
</フッターテンプレート>
</anthem:リピーター>
今回デバッグしてみて感じたのは、Ajaxはインターフェースのレスポンスが速いというメリットに加えて、大量のjsを導入することでデバッグの難易度が上がっていることもあり、適用する際にはやはり選択が必要だということです。状況。
http://www.cnblogs.com/RChen/archive/2006/08/06/anthem_debug.html
すべてに Ajax を使用することはできません。