代码之家  ›  专栏  ›  技术社区  ›  Alex York

ASP.NET:将值绑定到中继器内的自定义用户控件

  •  3
  • Alex York  · 技术社区  · 17 年前

    我有一个将数据绑定到中继器的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传递给mycolumsercontrol时,它不起作用(如果mycolumsercontrol上的productID是一个可为空的Int32-我可以调试它,它始终为空)。

    我能怎么做吗?

    1 回复  |  直到 15 年前
        1
  •  3
  •   Johan Leino    17 年前

    我做了一个小测试,如果productID是一个字符串,我就让它工作。在用户控件中将它改为和int之后,我遇到了类似的问题。 我在数据源中对中继器做了一个int.parse,并让它再次工作。 请检查传递到转发器数据源的productID是否为int类型。

    MyTestApp。

    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(); }
    }