【问题标题】:Packaging WebForms ASCX Controls for Reuse打包 WebForms ASCX 控件以供重用
【发布时间】:2014-06-15 02:34:28
【问题描述】:

我正在尝试编写一些可能会跨项目重用的用户控件。不过……

假设我们要编写一个控件,该控件将在 <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,但似乎都没有让我为我想要的东西“设计”(即使用标记)。

【问题讨论】:

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


    【解决方案1】:

    我不确定为什么这个示例代码不起作用(因为它应该并且如果复制到干净的项目中)但是如果您只是打算在没有任何花哨的转换的情况下显示数据,您也可以切换到 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();
        }
    }
    

    正如我所说,这两种方法都对我有用,但我认为如果您尝试使用中继器,也许您会更快地发现问题。

    【讨论】:

    • 这是在 Windows 库项目还是 Web 应用程序中?它似乎在 web 应用程序中对我有用,但在 Windows 库中不起作用(在添加所需的引用、命名空间等之后)
    • @glosrob 它在 Web 应用程序中。在我过去,我遵循指南 odetocode.com/blogs/scott/archive/2005/10/06/… 并且没有任何问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多