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

Soe*_*ren 2 asp.net user-controls

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

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

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

<%@ Reference Control="~/PictureGallery.ascx" %>
Run Code Online (Sandbox Code Playgroud)

在UserControl中我添加了一个类似这样的ClassName:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="PictureGallery.ascx.cs"
Inherits="PictureGallery" ClassName="PictureGallery" %>
Run Code Online (Sandbox Code Playgroud)

当我尝试在文章建议的.aspx.cs中创建一个实例时Dim gallery As ASP.PictureGallery,我得到一个"类型ASP.PictureGallery未定义".

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

怎么修好?

dav*_*eps 6

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

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

<div>
    <asp:PictureGallery id="myGallery" runat="server" MyProperty="SomeValue">  
    </asp:PictureGallery>
</div>
Run Code Online (Sandbox Code Playgroud)

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

Dim gallery as PictureGallery = LoadControl("~/PathToControl/gallery.ascx")
gallery.MyProperty = "SomeValue"
placeHolder.controls.add(gallery)
Run Code Online (Sandbox Code Playgroud)

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

Partial Public Class MyControlsClassName
    Inherits System.Web.UI.UserControl
Run Code Online (Sandbox Code Playgroud)

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