3

我有一个将数据绑定到中继器的 ASP.NET 控件。在该中继器内,我有另一个自定义用户控件。我想根据当前绑定项向第二个控件传递一个值。

<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 - 我可以调试它并它始终为空)。

任何想法我怎么能做到这一点?

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 回答