大家好:我正在维护旧代码,偶然发现了一个ASP。Net WebForms页面,其中有一个DataList控件,如下所示:
<asp:DataList ID="DL" runat="server" OnItemDataBound="DLItemDataBound">
<HeaderTemplate>
<table class="retail-grid" style="border-collapse: collapse;">
<tr>
<th style="text-align: left;">Line #</th>
<th style="text-align: left;">Item Description</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<asp:Label runat="server" ID="ItemID" Text='<%# DataBinder.Eval(Container.DataItem, "ItemID")%>'></asp:Label>
</td>
<td>
<asp:Label runat="server" ID="Quantity" Text='<%# DataBinder.Eval(Container.DataItem, "Quantity")%>'></asp:Label>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:DataList>
当页面显示时,我可以使用任何开发人员工具(Chrome DevTools, Firefox,…)检查结果,并且在每一行之后,还有另一个具有单个空单元格。你知道原因是什么吗?
嗯…我已经找到了错误的根源:这是我正在使用的控件。控件的HTML输出有很大的不同,例如:DataGrid、DataList或Repeater;尽管您可以使用这两个控件中的任何一个来获取表格,但使用它们的方式却有很大的不同。
在我发布的代码中,我应该使用Repeater,因为我正在显式地编写表结构的其余部分。
<asp:Repeater ID="DL" runat="server" OnItemDataBound="RepeaterItemDataBound">
<HeaderTemplate>
<table class="retail-grid" style="border-collapse: collapse;">
<tr>
<th style="text-align: left;">Line #</th>
<th style="text-align: left;">Item Description</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<asp:Label runat="server" ID="ItemID" Text='<%# DataBinder.Eval(Container.DataItem, "ItemID")%>'></asp:Label>
</td>
<td>
<asp:Label runat="server" ID="Quantity" Text='<%# DataBinder.Eval(Container.DataItem, "Quantity")%>'></asp:Label>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
有关更详细的解释,请查看文章决定何时使用数据网格、数据列表或中继器