1

我正在使用 asp.net 4.5 c#。我创建了一个用户控件,其中包含以下成员:

  [Bindable(true)]
    public Product item
    {
        get{
            return _product;
        }
        set
        {
            _product = value;
        }

    }

然后我使用我的控件,同时将“产品”数据绑定到上面的成员中:

  <script runat="server">
Product item=new Product();
            </script>  
                    <uc:productBox runat="server" item="<%#item%>"/>      

虽然这可行,但尝试以下列方式绑定列表中的动态项目失败:

  foreach (Product item in ProductList()){%>          
                    <uc:productBox runat="server" item="<%#item%>"/>       
            <%}%>

我收到以下错误:

当前上下文中不存在名称“项目”

为什么我不能绑定列表中的项目,我该如何解决这个问题才能工作?

4

1 回答 1

0

绑定表达式只能从任何可见的地方访问类范围内的变量或静态成员,而不是任何循环的范围,因为循环将在实际代码中自己的范围内执行。

您应该使用 aPlaceholder并将其填充到后面的代码中,或者(甚至更好)使用Repeater获取您的 ProductList 并构建您的productBoxes的控件。

所以在ItemTemplate你的Repeater你应该把你的ProductBox和使用<%# (Product)Container.DataItem %>表达式放在你的Item属性上,比如将一个简单的列表绑定到一个Repeater.

一个小提示:在 ASPX 中构建 foreach 写得不是很好。永远不要那样做。此外,名称约定坚持以类/控件/公共成员名称的大写字母开头。

于 2014-12-09T09:01:13.510 回答