Introduction : Anthem est un framework Ajax utile qui prend en charge ASP.NET 1.1, 2.0.
Étant donné que tous les contrôles de ce framework héritent des propres contrôles serveur d'ASP.NET, presque toutes les propriétés et comportements de ces contrôles sont conservés (à l'exception de la modification de leur PostBack en appel de non-actualisation de CallBack). La courbe d’apprentissage est donc très douce.
Aujourd'hui, j'ai rencontré un problème de débogage gênant lors de l'utilisation d'Anthem, qui est enregistré ici.
Dans le code ci-dessous, j'utilise un contrôle 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">
<Modèle d'en-tête>
<tr class="formTitle">
<td>
Sélectionnez</td>
<td>
Noms de fichiers et de dessins</td>
<td>
Doit être envoyé</td>
<td>
Est-ce original ?</td>
<td>
Remarques</td>
</tr>
</HeaderTemplate>
<Modèle d'élément>
<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="txtQuantity" runat="server" Text='<%# XPath("@Quantity") %>' width="30" />
</td>
<td>
<asp:RadioButtonList ID="radiolist_IsOriginal" runat="server" SelectedValue='<%# XPath("@IsOriginal") %>'
RépéterDirection="Horizontal">
<asp:ListItem Value="True">Original</asp:ListItem>
<asp:ListItem Value="False">Copier</asp:ListItem>
</asp:RadioButtonList>
</td>
<td>
<asp:TextBox ID="txtComment" runat="server" Text='<%# XPath("Comment") %>' />
</td>
</tr>
</ItemTemplate>
<Modèle de pied de page>
</FooterTemplate>
</anthem:Répéteur>
</table>
Lors de l'exécution de ce code, une erreur JS se produit parfois : "Erreur d'exécution inconnue".
Et cette erreur ne se produit que dans des situations spécifiques et est normale dans d’autres situations similaires.
Heureusement, VS 2005 offre des capacités très puissantes de débogage de scripts côté client. J'ai finalement identifié l'erreur dans une ligne de code générée par Anthem :
control.innerHTML = result.controls[controlID];
Après avoir vérifié les informations pertinentes, j'ai découvert que sous IE, lors de l'attribution d'une valeur à l'attribut innerHTML, la valeur attribuée sera vérifiée. S'il n'est pas bien formé, une « erreur d'exécution inconnue » peut se produire.
J'ai donc jugé qu'il y avait quelque chose qui n'allait pas avec la sortie HTML d'anthem.Repeater. Comme vous pouvez le voir sur les deux lignes en surbrillance dans le code ci-dessus, l'étiquette de la table se trouve à l'extérieur du répéteur. Par conséquent, le répéteur lui-même produit une série de tr, pas un tout bien formé.
J'ai donc mis respectivement la tête et la queue des balises de table dans le HeaderTemplate et le FooterTemplate du Repeater, et le problème a été résolu.
(La raison pour laquelle j'ai mis la balise table à l'extérieur auparavant était que lorsque je la mettais dans HeaderTemplate et FooterTemplate, je ne sais pas pourquoi le concepteur VS ne pouvait pas passer en mode conception. Le changer ainsi peut résoudre le problème. )
Une fois la modification réussie , Le Code est le suivant :
<asp:XmlDataSource ID="XmlDataSource2" runat="server" XPath="//NeedDocs/Doc"
EnableCaching="false"></asp:XmlDataSource>
<anthem:Repeater ID="rptNeedDocs" runat="server" DataSourceID="XmlDataSource2" AutoUpdateAfterCallBack="False">
<Modèle d'en-tête>
<table class="mytable" width="100%" Cellpacing="0" cellpadding="0">
<tr class="formTitle">
<td>
Sélectionnez</td>
<td>
Noms de fichiers et de dessins</td>
<td>
Doit être envoyé</td>
<td>
Est-ce original ?</td>
<td>
Remarques</td>
</tr>
</HeaderTemplate>
<Modèle d'élément>
<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="txtQuantity" runat="server" Text='<%# XPath("@Quantity") %>' width="30" />
</td>
<td>
<asp:RadioButtonList ID="radiolist_IsOriginal" runat="server" SelectedValue='<%# XPath("@IsOriginal") %>'
RépéterDirection="Horizontal">
<asp:ListItem Value="True">Original</asp:ListItem>
<asp:ListItem Value="False">Copier</asp:ListItem>
</asp:RadioButtonList>
</td>
<td>
<asp:TextBox ID="txtComment" runat="server" Text='<%# XPath("Comment") %>' />
</td>
</tr>
</ItemTemplate>
<Modèle de pied de page>
</table>
</FooterTemplate>
</anthem:Répéteur>
Après ce débogage, j'ai l'impression qu'en plus des avantages d'une réponse rapide sur l'interface, Ajax augmente également la difficulté du débogage en raison de l'introduction d'une grande quantité de js, donc lors de son application, il faut encore faire des choix en fonction de la situation. Vous ne pouvez pas utiliser Ajax pour tout
http://www.cnblogs.com/RChen/archive/2006/08/06/anthem_debug.html
.