ฉันบังเอิญค้นพบความแตกต่างระหว่าง 2.0 และ 1.1 และจดไว้เพื่อเตือนทุกคน
เป็นเรื่องเกี่ยวกับการสร้างโค้ดสำหรับหน้าแรก เรารู้ว่าการควบคุมเซิร์ฟเวอร์ asp.net จะถูกตีความในสคริปต์จาวาสคริปต์ส่วนหน้าและรหัส html ในที่สุด ตัวอย่างเช่น การควบคุม "datagrid" จะถูกตีความเป็นป้ายกำกับ "ตาราง" และการควบคุม "กล่องกาเครื่องหมาย" จะถูกตีความ ลงใน "<input type='checkbox'... …"Label. ทั้ง asp.net2.0 และ asp.net1.1 มีกลไกนี้ ดังนั้นเราจึงมักจะใช้กลไกนี้เพื่อเขียนสคริปต์จาวาสคริปต์บางส่วนที่แผนกต้อนรับเพื่อใช้งานแท็ก html ที่สร้างขึ้นหลังจากการตีความเหล่านี้ และเพื่อเรียกเหตุการณ์บางอย่าง ฉันไม่รู้ว่าคุณใช้วิธีนี้บ่อยไหม แต่ฉันใช้วิธีนี้บ่อยและไม่เคยเบื่อเลย
พบปัญหาโดยไม่ได้ตั้งใจ ฉันคัดลอกสคริปต์ js บางตัวภายใต้ 1.1 โดยตรงและใช้ในโครงการที่ต่ำกว่า 2.0 ฉันพบข้อผิดพลาดและข้อผิดพลาดของสคริปต์ ฉันคิดไม่ออก จากนั้นฉันก็ศึกษา asp.net2 ที่สร้างโค้ดส่วนหน้าอย่างละเอียด ความลับก็ถูกค้นพบ ภายใต้ asp.net หลังจากตีความการควบคุมเซิร์ฟเวอร์ในคอลัมน์เทมเพลต DataGrid แล้ว ป้ายกำกับที่สร้างขึ้นจะสร้าง ID ใหม่ตาม ID ของการควบคุมเซิร์ฟเวอร์ดั้งเดิม
ตัวอย่างเช่น (ภายใต้ asp.net1.1) คอนโทรลกล่องกาเครื่องหมายถูกใช้ในคอลัมน์เทมเพลตของคอนโทรล DataGrid:
<asp:datagrid id = "myDataGrid" runat = "เซิร์ฟเวอร์" AutoGenerateColumns = "เท็จ" ความสูง = "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="Select<input type='checkbox' id='' onclick='doSelectAll();' title='เลือกทั้งหมด'>">
<HeaderStyleHorizontalAlign="Center" CssClass="list_1"></HeaderStyle>
<ItemStyle HorizonAlign="Center" CssClass="list_td"></ItemStyle>
<เทมเพลตรายการ>
<asp:CheckBox id="CheckBox1" runat="server"></asp:CheckBox>
</เทมเพลตรายการ>
</asp:TemplateColumn>
<asp:HyperLinkColumn DataNavigateUrlField="COLOR_ID" DataNavigateUrlFormatString="InfoCOLOR.aspx?id={0}&flag=0"
DataTextField="COLOR_NAME" HeaderText="ชื่อสี">
<HeaderStyleHorizontalAlign="Center" CssClass="list_1"></HeaderStyle>
<ItemStyle HorizonAlign="Center" CssClass="list_td"></ItemStyle>
</asp:HyperLinkColumn>
<asp:BoundColumn DataField="COLOR_CODE" HeaderText="การเข้ารหัส HTML สี">
<HeaderStyleHorizontalAlign="Center" CssClass="list_1"></HeaderStyle>
<ItemStyle HorizonAlign="Center" CssClass="list_td"></ItemStyle>
</asp:BoundColumn>
</คอลัมน์>
</asp:datagrid>
หลังจากอธิบาย html ที่แผนกต้อนรับแล้ว มันจะกลายเป็น:
<table cellspacing="0" Rules="all" border="1" id="myDataGrid" style="height:100%;width:100%;border-collapse:collapse;">
<tr class="list_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="ช่องทำเครื่องหมาย" 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>
</ตาราง>
เราจะเห็นว่าตัวควบคุม 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 ที่มันอยู่ รหัสของตัวเอง และแถวที่ข้อมูลถูกผูกไว้
ผลลัพธ์ข้างต้นถูกสร้างขึ้นภายใต้ asp.net1.1 รหัสที่สร้างโดย 2.0 มีการเปลี่ยนแปลง id ไม่ใช่ myDataGrid__ctl2_CheckBox1 แต่เป็น myDataGrid:_ctl2:CheckBox1 แต่แอตทริบิวต์ name ยังคงไม่เปลี่ยนแปลง คุณสามารถเดาวัตถุประสงค์ของการดำเนินการนี้ แค่ทำให้ id และชื่อสอดคล้องกัน จริงๆ แล้ว มันควรจะเป็นแบบนี้
การค้นพบเล็กๆ น้อยๆ ฉันหวังว่ามันจะช่วยทุกคนได้