如何将 List 绑定到 WebForms 中的 ListView 中

本文关键字:WebForms 中的 ListView 绑定 List string | 更新日期: 2023-09-27 18:31:16

我有一个List<string>集合,我想将其绑定到我的ListView中。

以下是我ListView的标记:

<asp:ListView ID="lvList" runat="server">
        <LayoutTemplate>         
            <div id="Div1" runat="server">              
                <div ID="itemPlaceholder" runat="server">              
                </div>         
            </div>      
        </LayoutTemplate>
        <EmptyDataTemplate>         
            <div id="Div2" runat="server">              
                <div ID="itemPlaceholder" runat="server">                 
                No data was returned.             
                </div>         
            </div>      
        </EmptyDataTemplate>
        <ItemTemplate>
            <asp:Label ID="ProductNameLabel" runat="server" Text='<%# Eval ("theList") %>'/>
        </ItemTemplate>
</asp:ListView>

在我的代码隐藏中:

protected void Page_Load(object sender, EventArgs e)
{         
    List<string> theList = new List<string>();
    //populate members of list
    lvList.DataSource = theList;
    lvList.DataBind();
}

错误信息:

System.Web.HttpException 未由用户代码
处理 消息="数据绑定:"System.String"不包含具有以下属性的属性 '名单'这个名字。

我想我在这里做错了事情,有人可以建议我吗?

如何将 List<string> 绑定到 WebForms 中的 ListView 中

使用 '<%# Container.DataItem %>

<asp:Label ID="ProductNameLabel" runat="server" Text='<%# Container.DataItem %>'/>

<asp:Label ID="ProductNameLabel" runat="server" Text='<%# Eval ("theList") %>

此行导致问题,因为您引用了列表当前元素中的属性"theList",但该列表除了内部的字符串外没有任何属性。

要走的方法是例如在后面的代码中实现该方法,例如

protected void Test(object obj)
{
    return obj.ToString();
}

在 ASPX 中:

 <asp:Label ID="ProductNameLabel" runat="server" Text='<%# Test(Container.DataItem) %>

我还没有测试过它,但它应该可以解决问题。

EVAL 用于单个键值,数据绑定控件从头到尾循环访问集合,并逐个放置在放置 eval 语句的位置。

此链接中的答案可以提供更好的想法。如何使用DataBinder.Eval从集合中检索当前对象?

希望这会有所帮助