Introducción: Anthem es un marco Ajax útil que admite ASP.NET 1.1, 2.0.
Dado que todos los controles en este marco heredan de los propios controles del servidor de ASP.NET, casi todas las propiedades y comportamientos de estos controles se conservan (excepto cambiar su PostBack a la llamada de no actualización de CallBack). Entonces la curva de aprendizaje es muy suave.
Hoy encontré un problema de depuración problemático al usar Anthem, que se registra aquí.
En el código siguiente, utilizo un control Anthem.Repeater.
<asp:XmlDataSource ID="XmlDataSource2" runat="servidor" XPath="//NeedDocs/Doc"
EnableCaching="false"></asp:XmlDataSource>
<table class="mytable" width="100%" cellspace="0" cellpadding="0">
<anthem:Repeater ID="rptNeedDocs" runat="servidor" DataSourceID="XmlDataSource2"
AutoUpdateAfterCallBack="Falso">
<Plantilla de encabezado>
<tr class="formTitle">
<td>
Seleccionar</td>
<td>
Nombres de archivos y dibujos</td>
<td>
Debe ser enviado</td>
<td>
¿Es original?</td>
<td>
Observaciones</td>
</tr>
</HeaderTemplate>
<Plantilla de artículo>
<tr>
<td>
<asp:CheckBox ID="chkDoc" runat="servidor" Checked="True" />
<asp:HiddenField ID="hidDocId" runat="servidor" Valor='<%# XPath("@Id") %>' />
</td>
<td>
<asp:Label ID="lblDocName" runat="servidor" Text='<%# XPath("@Name") %>' />
</td>
<td>
<asp:TextBox ID="txtQuantity" runat="servidor" Text='<%# XPath("@Cantidad") %>' Ancho="30" />
</td>
<td>
<asp:RadioButtonList ID="radiolist_IsOriginal" runat="servidor" SelectedValue='<%# XPath("@IsOriginal") %>'
RepetirDirección="Horizontal">
<asp:ListItem Value="True">Original</asp:ListItem>
<asp:ListItem Value="False">Copiar</asp:ListItem>
</asp:RadioButtonList>
</td>
<td>
<asp:TextBox ID="txtComment" runat="servidor" Text='<%# XPath("Comentario") %>' />
</td>
</tr>
</ItemTemplate>
<Plantilla de pie de página>
</Plantilla de pie de página>
</anthem:Repetidor>
</tabla>
Cuando se ejecuta este código, a veces ocurre un error de JS: "Error de tiempo de ejecución desconocido".
Y este error sólo se produce en situaciones concretas y es normal en otras situaciones similares.
Afortunadamente, VS 2005 proporciona capacidades de depuración de scripts del lado del cliente muy potentes. Finalmente identifiqué el error en una línea de código generada por Anthem:
control.innerHTML = resultado.controles[controlID];
Después de verificar la información relevante, descubrí que en IE, al asignar un valor al atributo internalHTML, se verificará el valor asignado. Si no está bien formado, puede ocurrir un "error de ejecución desconocido".
Entonces juzgué que había algún problema con la salida HTML de anthem.Repeater. Como puede ver en las dos líneas resaltadas en el código anterior, la etiqueta de la tabla está fuera del Repetidor. Por lo tanto, el repetidor genera una serie de tr, no un conjunto bien formado.
Así que puse el encabezado y el final de las etiquetas de la tabla en HeaderTemplate y FooterTemplate del repetidor respectivamente, y el problema se resolvió.
(La razón por la que puse la etiqueta de la tabla afuera antes fue porque cuando la puse en HeaderTemplate y FooterTemplate, no sé por qué el diseñador de VS no pudo cambiar a la vista de diseño. Cambiarlo de esta manera puede resolver el problema. )
Después de que la modificación sea exitosa, el código es el siguiente:
<asp:XmlDataSource ID="XmlDataSource2" runat="servidor" XPath="//NeedDocs/Doc"
EnableCaching="false"></asp:XmlDataSource>
<anthem:Repeater ID="rptNeedDocs" runat="servidor" DataSourceID="XmlDataSource2" AutoUpdateAfterCallBack="False">
<Plantilla de encabezado>
<table class="mytable" width="100%" cellspace="0" cellpadding="0">
<tr class="formTitle">
<td>
Seleccionar</td>
<td>
Nombres de archivos y dibujos</td>
<td>
Debe ser enviado</td>
<td>
¿Es original?</td>
<td>
Observaciones</td>
</tr>
</HeaderTemplate>
<Plantilla de artículo>
<tr>
<td>
<asp:CheckBox ID="chkDoc" runat="servidor" Checked="True" />
<asp:HiddenField ID="hidDocId" runat="servidor" Valor='<%# XPath("@Id") %>' />
</td>
<td>
<asp:Label ID="lblDocName" runat="servidor" Text='<%# XPath("@Name") %>' />
</td>
<td>
<asp:TextBox ID="txtQuantity" runat="servidor" Text='<%# XPath("@Cantidad") %>' Ancho="30" />
</td>
<td>
<asp:RadioButtonList ID="radiolist_IsOriginal" runat="servidor" SelectedValue='<%# XPath("@IsOriginal") %>'
RepetirDirección="Horizontal">
<asp:ListItem Value="True">Original</asp:ListItem>
<asp:ListItem Value="False">Copiar</asp:ListItem>
</asp:RadioButtonList>
</td>
<td>
<asp:TextBox ID="txtComment" runat="servidor" Text='<%# XPath("Comentario") %>' />
</td>
</tr>
</ItemTemplate>
<Plantilla de pie de página>
</tabla>
</Plantilla de pie de página>
</anthem:Repetidor>
Después de esta depuración, siento que además de los beneficios de una respuesta rápida en la interfaz, Ajax también aumenta la dificultad de la depuración debido a la introducción de una gran cantidad de js, por lo que al aplicarlo, aún tienes que tomar decisiones basadas en la situación.
puedes usar Ajax para todo.