我读到here td标签必须嵌套,所以当我看到ListView的ItemTemplate属性标签看起来像这样时我很困惑:
<ItemTemplate>
<td id="Td2" runat="server">
<table>
<tr>
<td> </td>
<td>
<a href="ProductDetails.aspx?productID=<%#:Item.ProductID%>">
<img src="/Catalog/Images/Thumbs/<%#:Item.ImagePath%>"
width="100" height="75" /></a>
</td>
<td>
<a href="ProductDetails.aspx?productID=<%#:Item.ProductID%>">
<span class="ProductName">
<%#:Item.ProductName%>
</span>
</a>
<br />
<span class="ProductPrice">
<b>Price: </b><%#:String.Format("{0:c}", Item.UnitPrice)%>
</span>
<br />
</td>
</tr>
</table>
</td>
</ItemTemplate>
这是否与ListView从某个类继承并实现大量接口的事实有关?或者它与我不熟悉的ItemTemplate的某些方面有关系吗?我的来源是错的还是“只是ASP的事情”?
答案 0 :(得分:1)
这就是asp.net定义控件的方式。一旦渲染了asp.net页面(转换为纯html),那些td
元素就应该嵌套在tr
中。您可以通过在浏览器中查看页面来源来查看输出。
答案 1 :(得分:1)
我不知道您的LayoutTemplate是什么样的,但这实际上与ListView本身无关,而是与开发人员选择的HTML布局有关。 td最好属于tr,但这些只是标签。您可以根据需要更改css并重新定义。然后浏览器将对其进行解释并显示它,然后您就可以处理选择的后果=)。
上述代码有意义的可能方式是:
<LayoutTemplate>
<table border="0" cellpadding="1">
<tr>
<th>Product</th>
</tr>
<tr>
<td id="itemPlaceholder" runat="server"></td>
</tr>
</table>
</LayoutTemplate>
这将使单个外部表具有产品标题,然后该表的每一行将包含上面的内部表(每个产品)。