소개: Anthem은 ASP.NET 1.1, 2.0을 지원하는 유용한 Ajax 프레임워크입니다.
이 프레임워크의 모든 컨트롤은 ASP.NET의 자체 서버 컨트롤에서 상속되므로 이러한 컨트롤의 거의 모든 속성과 동작이 유지됩니다(PostBack을 콜백의 새로 고침이 아닌 호출로 변경하는 경우 제외). 따라서 학습 곡선이 매우 완만합니다.
오늘 여기에 녹음한 Anthem을 사용하다가 귀찮은 디버깅 문제에 직면했습니다.
아래 코드에서는 Anthem.Repeater 컨트롤을 사용합니다.
<asp:XmlDataSource ID="XmlDataSource2" runat="서버" XPath="//NeedDocs/Doc"
EnableCaching="false"></asp:XmlDataSource>
<table class="mytable" width="100%" cellpacing="0" cellpadding="0">
<anthem:Repeater ID="rptNeedDocs" runat="서버" DataSourceID="XmlDataSource2"
AutoUpdateAfterCallBack="거짓">
<헤더템플릿>
<tr class="formTitle">
<TD>
선택</td>
<TD>
파일 및 도면 이름</td>
<TD>
보내야 합니다</td>
<TD>
원본인가요?</td>
<TD>
비고</td>
</tr>
</HeaderTemplate>
<항목 템플릿>
<tr>
<TD>
<asp:CheckBox ID="chkDoc" runat="서버" 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") %>'
RepeatDirection="수평">
<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>
<바닥글 템플릿>
</FooterTemplate>
</anthem:리피터>
</table>
이 코드를 실행하면 "알 수 없는 런타임 오류"라는 JS 오류가 발생하는 경우가 있습니다.
그리고 이 오류는 특정 상황에서만 발생하며 다른 유사한 상황에서는 정상입니다.
다행스럽게도 VS 2005는 매우 강력한 클라이언트측 스크립트 디버깅 기능을 제공합니다. 마침내 Anthem에서 생성된 코드 줄에서 오류를 정확히 찾아냈습니다.
control.innerHTML = 결과.controls[controlID];
관련 정보를 확인한 결과, IE에서는 innerHTML 속성에 값을 할당하면 할당된 값이 확인되는 것을 발견했습니다. 형식이 올바르지 않으면 "알 수 없는 런타임 오류"가 발생할 수 있습니다.
그래서 anthem.Repeater의 HTML 출력에 문제가 있다고 판단했습니다. 위 코드에서 강조 표시된 두 줄에서 볼 수 있듯이 테이블 레이블은 반복기 외부에 있습니다. 따라서 Repeater 자체는 전체가 잘 구성된 것이 아닌 일련의 tr을 출력합니다.
그래서 테이블 태그의 head와 tail을 각각 Repeater의 HeaderTemplate과 FooterTemplate에 넣어서 문제를 해결했습니다.
(이전에 테이블 태그를 바깥에 넣은 이유는 HeaderTemplate과 FooterTemplate에 넣었을 때 왜 VS 디자이너가 디자인 뷰로 전환이 안되는지 모르겠어서였습니다. 이렇게 바꾸면 문제가 해결될 수 있습니다. )
수정이 성공한 후 코드는 다음과 같습니다.
<asp:XmlDataSource ID="XmlDataSource2" runat="서버" 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="서버" 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") %>'
RepeatDirection="수평">
<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>
<바닥글 템플릿>
</table>
</FooterTemplate>
</anthem:리피터>
이 디버깅을 하고 나니 Ajax는 인터페이스의 빠른 응답이라는 장점 외에도 대량의 js 도입으로 인해 디버깅의 난이도도 높아지는 것 같아서 적용할 때 여전히 기반으로 선택해야 한다고 생각합니다. 상황. 모든 것에 Ajax를 사용할 수는 없습니다.
http://www.cnblogs.com/RChen/archive/2006/08/06/anthem_debug.html