مقدمة: Anthem هو إطار عمل Ajax مفيد يدعم ASP.NET 1.1، 2.0.
نظرًا لأن كافة عناصر التحكم في هذا الإطار ترث من عناصر تحكم الخادم الخاصة بـ ASP.NET، يتم الاحتفاظ تقريبًا بجميع خصائص وسلوكيات عناصر التحكم هذه (باستثناء تغيير PostBack إلى استدعاء عدم التحديث الخاص بـ CallBack). وبالتالي فإن منحنى التعلم لطيف للغاية.
لقد واجهت اليوم مشكلة تصحيح مزعجة عند استخدام Anthem، والتي تم تسجيلها هنا.
في الكود أدناه، أستخدم عنصر التحكم Anthem.Repeater.
<asp:معرف XmlDataSource = "XmlDataSource2" runat = "الخادم" XPath = "//NeedDocs/Doc"
EnableCaching="false"></asp:XmlDataSource>
<فئة الجدول = "mytable" width = "100%" cellpacing = "0" cellpadding = "0">
<النشيد: معرف المكرر = "rptNeedDocs" runat = "الخادم" DataSourceID = "XmlDataSource2"
AutoUpdateAfterCallBack="False">
<قالب الرأس>
<tr class="formTitle">
<TD>
حدد</td>
<TD>
أسماء الملفات والرسم</td>
<TD>
ينبغي إرسالها</td>
<TD>
هل هو أصلي؟</td>
<TD>
ملاحظات</td>
</tr>
</HeaderTemplate>
<قالب العنصر>
<تر>
<TD>
<asp:CheckBox ID = "chkDoc" runat = "الخادم" تم التحقق منه = "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") %>'
كرر الاتجاه = "أفقي">
<asp:ListItem Value="True">الأصل</asp:ListItem>
<asp:ListItem Value="False">نسخ</asp:ListItem>
</asp:RadioButtonList>
</TD>
<TD>
<asp:TextBox ID="txtComment" runat="server" Text='<%# XPath("Comment") %>' />
</TD>
</tr>
</ItemTemplate>
<قالب التذييل>
</FooterTemplate>
</النشيد: مكرر>
</الجدول>
عند تشغيل هذا الرمز، يحدث أحيانًا خطأ JS: "خطأ غير معروف في وقت التشغيل".
وهذا الخطأ يحدث فقط في مواقف محددة وهو أمر طبيعي في مواقف أخرى مماثلة.
ولحسن الحظ، يوفر VS 2005 إمكانات قوية جدًا لتصحيح أخطاء البرامج النصية من جانب العميل. لقد حددت أخيرًا الخطأ في سطر من التعليمات البرمجية التي تم إنشاؤها بواسطة Anthem:
control.innerHTML = result.controls[controlID];
بعد التحقق من المعلومات ذات الصلة، وجدت أنه في IE، عند تعيين قيمة لسمة InnerHTML، سيتم التحقق من القيمة المعينة. إذا لم يتم تشكيله بشكل جيد، فقد يحدث "خطأ غير معروف في وقت التشغيل".
لذلك قررت أن هناك خطأ ما في إخراج HTML بواسطة Anthem.Repeater. كما ترون من السطرين المميزين في الكود أعلاه، فإن تسمية الجدول موجودة خارج المكرر. لذلك، يقوم المكرر نفسه بإخراج سلسلة من tr، وليس بشكل جيد.
لذلك قمت بوضع رأس وذيل علامات الجدول في Repeater's HeaderTemplate وFooterTemplate على التوالي، وتم حل المشكلة.
(السبب وراء وضع علامة الجدول بالخارج من قبل هو أنه عندما أضعها في HeaderTemplate وFooterTemplate، لا أعرف لماذا لم يتمكن مصمم VS من التبديل إلى عرض التصميم. تغييره بهذه الطريقة يمكن أن يحل المشكلة. )
وبعد نجاح التعديل يصبح الكود كالآتي:
<asp:معرف XmlDataSource = "XmlDataSource2" runat = "الخادم" XPath = "//NeedDocs/Doc"
EnableCaching="false"></asp:XmlDataSource>
<النشيد: معرف المكرر = "rptNeedDocs" runat = "الخادم" DataSourceID = "XmlDataSource2" AutoUpdateAfterCallBack = "False">
<قالب الرأس>
<فئة الجدول = "mytable" width = "100%" cellpacing = "0" cellpadding = "0">
<tr class="formTitle">
<TD>
حدد</td>
<TD>
أسماء الملفات والرسم</td>
<TD>
ينبغي إرسالها</td>
<TD>
هل هو أصلي؟</td>
<TD>
ملاحظات</td>
</tr>
</HeaderTemplate>
<قالب العنصر>
<تر>
<TD>
<asp:CheckBox ID = "chkDoc" runat = "الخادم" تم التحقق منه = "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") %>'
كرر الاتجاه = "أفقي">
<asp:ListItem Value="True">الأصل</asp:ListItem>
<asp:ListItem Value="False">نسخ</asp:ListItem>
</asp:RadioButtonList>
</TD>
<TD>
<asp:TextBox ID="txtComment" runat="server" Text='<%# XPath("Comment") %>' />
</TD>
</tr>
</ItemTemplate>
<قالب التذييل>
</الجدول>
</FooterTemplate>
</النشيد: مكرر>
بعد هذا التصحيح، أشعر أنه بالإضافة إلى فوائد الاستجابة السريعة على الواجهة، يزيد Ajax أيضًا من صعوبة التصحيح بسبب إدخال كمية كبيرة من js، لذلك عند تطبيقه، لا يزال يتعين عليك اتخاذ خيارات بناءً على الوضع. لا يمكنك استخدام Ajax في كل شيء
http://www.cnblogs.com/RChen/archive/2006/08/06/anthem_debug.html
.