우연히 2.0과 1.1의 차이점을 발견해서 모두에게 상기시키기 위해 적어보았습니다.
첫 페이지에 대한 코드를 생성하는 것입니다. 우리는 asp.net 서버 컨트롤이 결국 프런트 엔드 javascript 스크립트와 html 코드로 해석된다는 것을 알고 있습니다. 예를 들어 "datagrid" 컨트롤은 "table" 레이블로 해석되고 "CheckBox" 컨트롤은 해석됩니다. "<input type='checkbox'... …"레이블에 넣습니다. asp.net2.0과 asp.net1.1 모두 이 메커니즘을 가지고 있으므로 우리는 종종 이 메커니즘을 사용하여 프런트 데스크에서 일부 자바 스크립트 스크립트를 작성하여 이러한 해석 후에 생성된 html 태그를 작동하고 일부 이벤트를 호출할 수 있습니다. 여러분은 이 방법을 자주 사용하시는지 모르겠지만 저는 이 방법을 자주 사용하는데 질리지 않습니다.
우연히 문제가 발견되었습니다. 1.1 미만의 js 스크립트를 직접 복사하여 2.0 미만의 프로젝트에서 사용했는데, 오류와 스크립트 오류를 발견했습니다. 그런 다음 asp.net2에서 생성된 프런트엔드 코드를 주의 깊게 연구했습니다. , 비밀이 발견되었습니다. asp.net에서는 DataGrid 템플릿 열의 서버 컨트롤이 해석된 후 생성된 레이블이 원래 서버 컨트롤의 ID를 기반으로 새 ID를 생성합니다.
예를 들어(asp.net1.1에서) CheckBox 컨트롤은 DataGrid 컨트롤의 템플릿 열에 사용됩니다.
<asp:datagrid id="myDataGrid" runat="서버" AutoGenerateColumns="False" 높이="100%" 너비="100%"
EnableViewState="false">
<AlternatingItemStyle CssClass="list_bai"></AlternatingItemStyle>
<ItemStyle CssClass="list_lan"></ItemStyle>
<HeaderStyle CssClass="list_1"></HeaderStyle>
<열>
<asp:BoundColumn DataField="COLOR_ID" HeaderStyle-CssClass="disTd" ItemStyle-CssClass="disTd"></asp:BoundColumn>
<asp:TemplateColumn HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" HeaderText="선택<input type='checkbox' id='' onclick='doSelectAll();' title='모두 선택'>">
<HeaderStyle HorizontalAlign="Center" CssClass="list_1"></HeaderStyle>
<ItemStyle HorizontalAlign="Center" CssClass="list_td"></ItemStyle>
<항목 템플릿>
<asp:CheckBox id="CheckBox1" runat="server"></asp:CheckBox>
</ItemTemplate>
</asp:템플릿열>
<asp:HyperLinkColumn DataNavigateUrlField="COLOR_ID" DataNavigateUrlFormatString="InfoCOLOR.aspx?id={0}&flag=0"
DataTextField="COLOR_NAME" HeaderText="색상 이름">
<HeaderStyle HorizontalAlign="Center" CssClass="list_1"></HeaderStyle>
<ItemStyle HorizontalAlign="Center" CssClass="list_td"></ItemStyle>
</asp:HyperLinkColumn>
<asp:BoundColumn DataField="COLOR_CODE" HeaderText="색상 HTML 코딩">
<HeaderStyle HorizontalAlign="Center" CssClass="list_1"></HeaderStyle>
<ItemStyle HorizontalAlign="Center" CssClass="list_td"></ItemStyle>
</asp:BoundColumn>
</열>
</asp:데이터그리드>
프론트 데스크에서 HTML을 설명하면 다음과 같습니다.
<table cellpacing="0" rule="all" border="1" id="myDataGrid" style="height:100%;width:100%;border-collapse:collapse;">
<tr 클래스="목록_1">
<td class="disTd"> </td>
<td class="list_1" align="Center">선택<input type='checkbox' id='' onclick='doSelectAll();' title='모두 선택'></td>
<td class="list_1" align="Center">색상 이름</td>
<td class="list_1" align="Center">컬러 HTML 인코딩</td>
</tr>
<tr class="list_lan">
<td class="disTd">16</td>
<td class="list_td" align="Center"> <input id="myDataGrid__ctl2_CheckBox1" type="checkbox" name="myDataGrid:_ctl2:CheckBox1" /></td>
<td class="list_td" align="Center"><a href="InfoCOLOR.aspx?id=16&flag=0">213`</a></td>
<td class="list_td" align="Center">123123</td>
</tr>
</table>
DataGrid 컨트롤이 테이블 레이블이 되었고 ID는 변경되지 않고 원래
<asp:CheckBox id="CheckBox1" runat="server"></asp:CheckBox>가
변경되지 않은 것을 볼 수 있습니다.<input id="myDataGrid__ctl2_CheckBox1" type="checkbox" name="myDataGrid:_ctl2:CheckBox1" />
가 됩니다
.
여기에 있는 "myDataGrid__ctl2_CheckBox1"은 asp.net에 의해 자동으로 추가됩니다. 이는 DataGrid가 위치한 DataGrid의 ID, 자체 ID 및 데이터가 바인딩된 행을 결합하여 생성됩니다.
위 결과는 asp.net1.1에서 생성된 것입니다. 2.0에서 생성된 ID는 myDataGrid__ctl2_CheckBox1이 아니라 myDataGrid:_ctl2:CheckBox1로 변경되었지만, name 속성은 그대로 유지됩니다. ID와 이름을 일관되게 설정하면 됩니다. 사실 이것이 dotnet1.1의 불합리한 측면 중 하나일 수도 있습니다.
작은 발견이 모두에게 도움이 되었으면 좋겠습니다.