我正在尝试编写一些可能跨项目重用的用户控件。然而...
我们想说我们要编写一个控件,在<div>
中显示一个Foos列表。
在代码隐藏中考虑这一点:
public partial class FooBar : UserControl
{
protected List<Foo> Foos { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
Foos = Service.GetFoos();
}
}
但是我无法在标记中引用此属性。我希望这可行,但不会编译:
<div>
<%
foreach (var i in Foos)
{
%>
<p>Name: <%: i.Name %></p>
<%
}
%>
</div>
给出的错误是:
'System.Web.UI.UserControl' does not contain a definition for 'Foos'
我看着使用WebServerControl和UserControl,但似乎都没有让我设计&#39; (即使用标记)我想要的。
答案 0 :(得分:0)
我不确定为什么这个示例代码不起作用(因为它应该并且如果被复制到干净的项目中)但是如果您只是计划显示数据而没有任何内容,您也可以切换到Repeater控件花哨的转变:
<div>
<asp:Repeater runat="server" ID="rptFoos">
<ItemTemplate>
<p>Name: <%#: Eval("Name") %></p>
</ItemTemplate>
</asp:Repeater>
</div>
在代码隐藏中:
public partial class FooBar : UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
rptFoos.DataSource = Service.GetFoos();
rptFoos.DataBind();
}
}
正如我所说,两种方式对我来说都是干净的项目,但我认为如果您尝试使用中继器,也许您会更快地发现问题。