打包WebForms ASCX重用控件

时间:2014-04-29 08:48:57

标签: c# asp.net webforms user-controls

我正在尝试编写一些可能跨项目重用的用户控件。然而...

我们想说我们要编写一个控件,在<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; (即使用标记)我想要的。

1 个答案:

答案 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();
    }
}

正如我所说,两种方式对我来说都是干净的项目,但我认为如果您尝试使用中继器,也许您会更快地发现问题。