Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Asp.net UserControl-如何从列表中绑定数据对象?_C#_Asp.net_Data Binding_User Controls_Bindable - Fatal编程技术网

C# Asp.net UserControl-如何从列表中绑定数据对象?

C# Asp.net UserControl-如何从列表中绑定数据对象?,c#,asp.net,data-binding,user-controls,bindable,C#,Asp.net,Data Binding,User Controls,Bindable,我正在使用asp.NET4.5C。 我创建了一个用户控件,其中包含以下成员: [Bindable(true)] public Product item { get{ return _product; } set { _product = value; } } 然后,在将产品数据绑定到上面的成员时,我使用我的控件: <script

我正在使用asp.NET4.5C。 我创建了一个用户控件,其中包含以下成员:

  [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%>"/>       
            <%}%>
我得到以下错误:

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


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

绑定表达式只能从任何可见的位置访问类或静态成员范围内的变量,而不能访问任何循环的范围,因为循环将在代码隐藏中的自身范围内执行

您应该使用占位符并在代码隐藏中填充它,或者更好地使用ProductList并构建ProductBox

因此,在Repeater的ItemTemplate中,您应该放置ProductBox并在Item属性上使用表达式,如


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

谢谢。我按照你的建议做了,我现在有一个名为ProductsArea的转发器,我使用ProductsArea.DataSource=Products;ProductsArea.DataBind;在后面的代码中,在前面我使用:。但在我的控件中,该项始终为空。为什么会这样?@程序员从来没有自己使用过中继器控件。将Repeater的ItemType设置为产品的完整名称空间+类型,然后使用,如图所示:希望可以。或者试试看。请尝试这里的所有答案:并给我反馈什么有效。