我有一个用户控件,我在多个页面上使用它来显示有关对象的信息。无论何时我需要使用此用户控件,我都会调用一个名为Display(在usercontrol上)的方法并传入一些值。在foreach循环内的用户控件上设置属性
public void Display(string name, List<Items> items)
{
// Set a few protected properties so I can display values from the aspx page
}
这工作正常,但现在我需要在aspx页面中的foreach循环内使用此控件。
<% foreach (var c in Categories) { %>
<uc:ItemsControl runat="server"/>
<% } %>
类别对象具有我否则将传递到显示方法的方法和属性。那么我将如何正确设置值?
我试图在用户控件公开场合的属性,只是设置它们以这样的方式
<uc:ItemsControl Items="<%# c.Items %>"
OtherProperty="<%# c.GetProperty() %>"
runat="server"/>
这是不行的,因为性能得到派往是空的。如果我使用<%=那么它不起作用,实际上会抛出一个错误,因为它不能识别'c'(除非我离开runat =“server”,那么它至少可以编译,它仍然不会工作。
什么是做到这一点的正确方法
编辑:?另外,中继器控制可能使这更容易的数据绑定,但我宁愿避免使用任何.NET控件
重复器可能是正确的方式,但我们尽量避免使用.NET控件,并倾向于生成HTML。 – Brandon 2009-10-29 18:12:53
是的,我也是 - 我也发现循环发射HTML方法更直接。这就是为什么我喜欢ASP.NET MVC。但对于Web窗体,如果您已经在使用自己的自定义控件并需要填充其属性,尤其是在循环中,则使用数据绑定是最简单的方法。出于好奇,为什么要避免使用asp.net的内置控件?这是一个与绩效相关的问题还是其他问题?中继器控制非常简单,并且速度很快,并且不会导致视图状态或其他类似情况。中继器可以像伪装成控件的foreach循环一样起作用。 – 2009-10-29 20:26:08
这更多的是一致性/性能问题。我的老板最初从项目中的.NET控件移开,因为控件/ AjaxToolKit对我们所需要的太重了,所以采用了纯粹的HTML/jQuery方法。如果一切都失败了,我可以投入一个中继器,我只是想知道是否有任何方式使用我们已经开始的路径来做到这一点。 – Brandon 2009-10-29 20:32:43