asp.net转发器在每个<li></li>
中插入一个额外的<ItemTemplate>
。它与表格做同样的事情。它会插入额外的<tr></tr>
。和div一样。基本上我放在ItemTemplate中的任何元素都带有副本。
这是我的代码。
这是构建litData
aspx.vb文件的一部分:
If item.ItemType = ListItemType.Item Then
Dim drv As System.Data.DataRowView = DirectCast((e.Item.DataItem), System.Data.DataRowView)
Dim strLinkValue As String = drv.Row("ReturnVal").ToString()
Dim Literal1 As Literal = DirectCast(item.FindControl("litData"), Literal)
Literal1.Text = "<a href=" & strQString.ToLower().Replace("/default.aspx", "") & strLinkValue & "/default.aspx>Hello World" + strLinkValue + "</a>"
End If
这是在.aspx文件中:
<asp:Repeater ID="rptData" runat="server" OnItemDataBound="rptData_OnItemDataBound" EnableViewState="false">
<HeaderTemplate>
<ul>
</HeaderTemplate>
<ItemTemplate>
<li><asp:Literal ID="litData" runat="server" EnableViewState="false"></asp:Literal></li>
</ItemTemplate>
<FooterTemplate>
</ul>
</FooterTemplate>
</asp:Repeater>
我期待它呈现......
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
实际渲染的是什么......
<ul>
<li>Item 1</li>
<li></li>
<li>Item 2</li>
<li></li>
<li>Item 3</li>
<li></li>
</ul>
答案 0 :(得分:2)
根据评论,您将数据绑定到ItemDataBound
处理程序内的转发器。这不是正确的方法。将数据绑定移至Page_Load
:
protected void Page_Load(object sender, EventArgs e)
{
// other code
if (!IsPostBack)
{
rptData.DataSource = objDS;
rptData.DataBind();
}
}
您可能不再需要Item Bound处理程序