在ASP.NET中以编程方式创建usercontrol实例

时间:2011-02-16 11:57:12

标签: asp.net user-controls

我有一个需要动态添加的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" %>

当我尝试在.aspx.cs中创建一个实例时,如文章所示Dim gallery As ASP.PictureGallery,我得到一个“类型ASP.PictureGallery未定义”。

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

如何解决?

3 个答案:

答案 0 :(得分:6)

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

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

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

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

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

修改
后面代码中控件的类名是什么......如下所示:

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

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

答案 1 :(得分:0)

我认为你没有把控件放在你的代码中。您可能已经创建了引用,但是您的aspx中是否有<asp:PictureGalary id="gallary"></asp:PictureGalary>标记?

答案 2 :(得分:0)

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

动态添加用户控件时,您应该使用P age.LoadControl方法:

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