【问题标题】:ASP.NET: Bind a value to a custom user control inside a repeaterASP.NET:将值绑定到转发器内的自定义用户控件
【发布时间】:2009-06-11 07:46:40
【问题描述】:

我有一个将数据绑定到转发器的 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 - 我可以调试它,它总是为空)。

有什么想法可以做到这一点吗?

【问题讨论】:

  • 你能显示你的 MyCoolUserControl 的代码吗?

标签: asp.net repeater


【解决方案1】:

我做了一个小测试,如果 ProductID 是一个字符串,我就可以正常工作。在用户控件中将其更改为 int 后,我​​遇到了同样的问题。 我在转发器的数据源中做了一个 int.Parse 并让它再次工作。 检查您传递到转发器数据源的 ProductId 是否为 int 类型。

Mytest 应用程序。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 2019-07-27
    • 2011-01-18
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 2012-01-29
    相关资源
    最近更新 更多