为什么这个asp转发器会在每个“ItemTemplate”中插入额外的<li>(或)</li>

时间:2014-03-27 16:21:32

标签: html asp.net webforms

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>

1 个答案:

答案 0 :(得分:2)

根据评论,您将数据绑定到ItemDataBound处理程序内的转发器。这不是正确的方法。将数据绑定移至Page_Load

protected void Page_Load(object sender, EventArgs e)
{
    // other code

    if (!IsPostBack)
    {
        rptData.DataSource = objDS;
        rptData.DataBind();
    }
}

您可能不再需要Item Bound处理程序