3

データをリピーターにバインドする ASP.NET コントロールがあります。そのリピーター内に、別のカスタム ユーザー コントロールがあります。現在のバインド項目に基づいて、この 2 番目のコントロールに値を渡したいと思います。

<asp:Repeater runat="server" ID="ProductList">
    <ItemTemplate>
        <p>Product ID: <%# Eval("ProductID") %></p>
        <myControl:MyCoolUserControl runat="server" ProductID='<%# Eval("ProductID") %>' />
    </ItemTemplate>
</asp:Repeater>

リピーター項目テンプレートは、Eval ステートメントを使用して製品 ID を正しく出力しますが、同じことを行って製品 ID を MyCoolUserControl に渡すと、機能しません (MyCoolUserControl の ProductID が Nullable Int32 の場合、デバッグして、常に null です)。

どうすればこれを行うことができますか?

4

1 に答える 1

3

私は簡単なテストを行い、ProductID が文字列の場合に機能しました。ユーザーコントロールで int に変更した後、同じ問題が発生しました。リピーターへのデータソースで int.Parse を実行し、再び機能するようにしました。リピーター データソースに渡す ProductId のタイプが int であることを確認してください。

マイテストアプリ。

string[] values = new string[]{ "12", "13" };

MyRepeater.DataSource = from v in values
                        select new
                        {
                            ProdId = int.Parse(v)
                        };

MyRepeater.DataBind();

<asp:Repeater runat="server" ID="MyRepeater">
    <ItemTemplate>
        <My:control runat="server" ProductId='<%# Eval("ProdId") %>' />
    </ItemTemplate>
</asp:Repeater>

そしてユーザーコントロールで:

public int? ProductId
{
    set { MyLabel.Text = value.Value.ToString(); }
}
于 2009-06-11T09:21:15.360 に答える