6

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 はユーザー コードによって処理され
ませんでした Message="DataBinding: 'System.String' には 'theList' という名前のプロパティが含まれていません。"

私はここで間違ったことをしていると思います。誰か教えてもらえますか?

4

3 に答える 3

13

使用'<%# Container.DataItem %>:

<asp:Label ID="ProductNameLabel" runat="server" Text='<%# Container.DataItem %>'/>
于 2012-04-17T06:13:09.283 に答える
1

<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) %>

私はそれをテストしていませんが、うまくいくはずです。

于 2012-04-17T06:13:14.640 に答える
1

EVAL は単一のキー値で使用され、データ バインドされたコントロールはコレクションを最初から最後まで反復し、eval ステートメントを配置した場所に 1 つずつ配置します。

このリンクの答えは、より良いアイデアを提供できます。 DataBinder.Eval を使用してコレクションから現在のオブジェクトを取得する方法は?

これが役立つことを願っています

于 2012-04-17T06:28:25.157 に答える