Lý do là trong ASP.NET 2.0, mỗi server control sẽ được tạo ra 1 Unique ClientID có kế thừa từ ID của các control cha. Điều này có thể dẫn đến 1 ID rất dài thí dụ như <span id="page_ctl0_ctl1_repeater1_ctl0_ctl1_lblProductName" hoặc có thể dài hơn.
Nếu control này được lặp lại nhiều lần (dùng trong repeater hoặc datalist...), sẽ dẫn đến việc 1 phần không nhỏ nội dung HTML được sinh ra là các ID. Điều này làm dung lượng trang web lớn không cần thiết.
Để hạn chế điều này, có thể dùng HTML control tương ứng.
Thay vì dùng
<asp:Label ID="lblProductName" CssClass="product-name" runat="server" Text='<%#Eval("ProductName")%>'>
</asp: Label>
có thể dùng
<span class="product-name">
<asp:Literal ID="lblProductName" runat="server" Text='<%#Eval("ProductName")%>' ></asp:Literal>
</span>