【问题标题】:Create a usercontrol instance programmatically in ASP.NET在 ASP.NET 中以编程方式创建用户控件实例
【发布时间】:2011-03-23 19:52:38
【问题描述】:

我有一个需要动态添加的 UserControl。我试图关注这篇 MSDN 文章,但没有任何成功.... http://msdn.microsoft.com/en-us/library/c0az2h86.aspx

UserControl 基本上是一个图片库,它根据 ID 加载一些图片。我的想法是将此 ID 作为属性提供。然后,当我创建控件的实例时,我可以设置此 ID 并将其添加到表单中。

我在将使用它的 .aspx 页面中添加了对控件的引用,如下所示:

<%@ Reference Control="~/PictureGallery.ascx" %>

在 UserControl 中,我添加了这样的 ClassName:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="PictureGallery.ascx.cs"
Inherits="PictureGallery" ClassName="PictureGallery" %>

当我尝试按照文章Dim gallery As ASP.PictureGallery 的建议在 .aspx.cs 中创建实例时,我收到“类型 ASP.PictureGallery 未定义”。

文章提到了一个命名空间ASP,我尝试将其导入到 .aspx.cs 中,但没有成功。 所以,我无法获得对 UserControl 的引用。

如何解决?

【问题讨论】:

    标签: asp.net user-controls


    【解决方案1】:

    听起来您混淆了使用 UserControl 的两种不同方式。

    一种方法是在页面上注册控件,以便您可以在设计时将其放入页面中,例如

    <div>
        <asp:PictureGallery id="myGallery" runat="server" MyProperty="SomeValue">  
        </asp:PictureGallery>
    </div>
    

    第二个是在运行时以编程方式(或动态地)将其添加到您的代码中的页面中。如果是这样,那么您需要使用示例中提到的 LoadControl 函数。如果您这样做,则不需要在 aspx 文件中注册控件。 例如

    Dim gallery as PictureGallery = LoadControl("~/PathToControl/gallery.ascx")
    gallery.MyProperty = "SomeValue"
    placeHolder.controls.add(gallery)
    

    编辑
    后面代码中控件的类名是什么...类似这样的:

    Partial Public Class MyControlsClassName
        Inherits System.Web.UI.UserControl
    

    这是你声明它时需要使用的类型。它可能在命名空间内吗?

    【讨论】:

    • 是的,我知道这一点。但是按照您的建议进行操作,我得到“类型 PictureGallery 未定义”,并且我无法访问 gallery.MyProperty,无论如何都不是智能感知。这通常告诉我出了点问题。
    • @Soeren,查看我的编辑...在答案中添加代码比评论更容易
    • 显然我没有编辑权限,所以我必须把代码放在这里。类名是 'public partial class PictureGallery : System.Web.UI.UserControl' 没有命名空间...
    • @Soeren 您的项目是 C# 还是 VB.net?您的文件指示 c#,但您说 Dim 等不起作用,这是 vb.net 代码...所以您希望我将问题更改为 c#?
    • 用户控件是C#,使用它的页面是VB页面。所以我需要实例化控件的代码是VB..
    【解决方案2】:

    我认为您没有将控件放在后面的代码中。您可能已经创建了引用,但是您的 aspx 中是否有诸如 &lt;asp:PictureGalary id="gallary"&gt;&lt;/asp:PictureGalary&gt; 之类的标签?

    【讨论】:

    • 这是因为我通过使用 引用 ClassName 以编程方式添加了 UserControl。
    • 您建议以声明方式添加 UserControl,然后我需要注册它
    【解决方案3】:

    ASP 命名空间是在运行时生成的——用户控件在被 .aspx 页面使用时被“编译”,因此这就是为什么您会收到错误消息“类型 ASP.PictureGallery 未定义”。

    动态添加用户控件时,应使用 Page.LoadControl 方法:

    Page.LoadControl("~/PictureGallery.ascx")
    

    【讨论】:

      猜你喜欢
      • 2011-09-26
      • 1970-01-01
      • 2014-05-28
      • 2010-09-06
      • 1970-01-01
      • 1970-01-01
      • 2010-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多