[英]Asp.net UserControl - How to Data-Bind objects from a list?
我正在使用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%>"/>
<%}%>
我收到以下错误:
名称“ item”在当前上下文中不存在
为什么我不能绑定列表中的项目,如何解决这个问题才能起作用?
绑定表达式只能从可见的任何位置访问类范围内的变量或静态成员,而不能访问任何循环范围,因为该循环将在后面的代码中实际在其自身范围内执行。
您应该使用一个Placeholder
并在后面的代码中填充它,或者(甚至更好) 使用Repeater
控件来获取您的ProductList并构建productBox
。
因此,在Repeater
的ItemTemplate
,应将ProductBox
放在Item
属性上并使用<%# (Product)Container.DataItem %>
表达式,例如将简单列表绑定到Repeater
。
一个小提示:在ASPX中构建foreach的代码不是很好。 绝对不要那样做。 此外,名称约定还坚持在类/控件/公共成员名上以大写字母开头。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.