我正在使用asp.net 4.5 c#。 我创建了一个用户控件,其中包含以下成员:
[Bindable(true)]
public Product item
{
get{
return _product;
}
set
{
_product = value;
}
}
然后我使用我的控件,而DataBinding将一个“Product”放入上面的成员中:
<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”
为什么我无法绑定列表中的项目?如何才能解决这个问题?
答案 0 :(得分:0)
绑定表达式只能从可见的任何地方访问类或范围内的静态成员中的变量,而不是任何循环的范围,因为循环将在后面的代码中在自己的范围内执行,实际上。
您应该使用Placeholder
并在后面的代码中填充它,或者(甚至更好)use the Repeater
control使用您的ProductList并构建您的productBox
es。
因此,在您ItemTemplate
的{{1}}中,您应该将Repeater
和ProductBox
表达式放在<%# (Product)Container.DataItem %>
属性上,例如binding a simple list to a Repeater
。
一个小提示:在ASPX中构建foreach并不是很好。永远不要那样做。名称约定也坚持从类/控制/公共成员名称开头大写字母。