2009-10-14 59 views
1

我想创建我的第一个从面板派生的ASP.net服务器控件。出于某种原因,即使应用程序能够识别我的控件的类和名称空间,我也无法使.aspx页面识别我的服务器标记。如何让ASP.NET识别我的自定义服务器控件?

下面是我使用的步骤:

1)我创造,我已经放在我的site_code目录类CollapsablePanel。我正在使用Web App而不是Web站点,因此App_Code对我来说真的不可用。

Namespace webstation.WebControls 

    Public Class CollapsablePanel 
     Inherits System.Web.UI.WebControls.Panel 


    End Class 

End Namespace 

2)在.aspx文件我已经添加<%@注册的TagPrefix = “webstation” 命名空间= “MyApplication.webstation.WebControls” %>

我已经建立了项目,但我自定义标签前缀不会出现。如果我只是继续并输入编辑器不会引发错误,但是当我发布它并尝试访问它时,页面会发生错误。如果我尝试从代码隐藏(Imports MyApplication.webstation.WebControls)访问类,则自定义控件将显示在intellisense中,所以我知道Visual Studio正在某种程度上读取类信息。

我在这里做错了什么?任何想法都不胜感激。

迈克

回答

0

我能得到它的工作像预期有一次我去进取,在同创建一个类库项目解决方案,构建该项目,从类库中的bin复制DLL并将其放置在Web项目的文件夹中,该文件夹用于保存外部二进制文件。我还在项目中添加了对.dll的引用。一旦我做到了,那么语法:

<%@ Register Assembly="webstation.WebControls" Namespace="webstation.WebControls" TagPrefix="webstation" %> 

开始工作。有谁知道,如果我能够以某种方式自动更新在我的Web项目中编译的.DLL从同一解决方案中的类库?或者我每次都必须进入bin文件夹并手动将其复制到Web项目中?

感谢,

迈克

2

好像你可能会丢失标记名属性 作为

<%@ Register TagPrefix="webstation" TagName="CollapsiblePanel" Namespace="MyApplication.webstation.WebControls" %> 

,一旦你这样做,你应该能够访问它

<webstations:CollapsiblePanel id='usercontrol1" runat="server" /> 
+0

我不知道我应该有标记名,我想它来提供,我将在命名空间的所有类,而不必单独注册每一个。 另外,ASP.net上的教程视频不使用TagName: http://www.asp.net/learn/videos/video-297.aspx – mclark1129 2009-10-14 17:34:21

+0

如果您想注册* all *的类在给定的命名空间中,我相信你需要在@Register指令中提供程序集属性。所以像Assembly =“MyApplication.webstation.WebControls”,假设WebControls是一个生成DLL作为输出的项目。 – 2009-10-14 17:51:34

+0

你是对的MIke,你不需要指定标记名,但你需要指定程序集。我刚刚尝试过,它在我为我的dll添加程序集属性之后起作用 – 2009-10-14 17:58:29

1

退房斯科特谷的关于注册控件的博客文章,我喜欢自己在web.config文件中注册它们。 http://weblogs.asp.net/scottgu/archive/2006/11/26/tip-trick-how-to-register-user-controls-and-custom-controls-in-web-config.aspx

您需要确保您具有控件类的完全限定参考,这意味着库名称和命名空间。我将我的控件放在类库中,但可以将它们包含在App_Code文件夹中。您还可以注册在web.config用户控件,这两个例子如下:

相关问题