C# Asp.net UserControl-如何从列表中绑定数据对象?
我正在使用asp.NET4.5C。 我创建了一个用户控件,其中包含以下成员: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
[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设置为产品的完整名称空间+类型,然后使用,如图所示:希望可以。或者试试看。请尝试这里的所有答案:并给我反馈什么有效。