我有一个需要动态添加的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的引用。
如何解决?
答案 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")