我正在尝试创建从Panel派生的第一个ASP.net服务器控件。出于某种原因,即使应用程序识别出我的控件的类和命名空间,我也无法让.aspx页面识别我的服务器标记。
以下是我使用的步骤:
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文件中,我添加了<%@ Register TagPrefix =“webstation”Namespace =“MyApplication.webstation.WebControls”%>
我已经构建了项目,但我的自定义标记前缀没有出现。如果我只是继续并键入编辑器不会抛出错误,但是当我发布它并尝试访问它时页面会执行。如果我尝试从代码隐藏(Imports MyApplication.webstation.WebControls)访问该类,则自定义控件将出现在intellisense中,因此我知道Visual Studio正在某种程度上读取类信息。
我在这里做错了什么?非常感谢任何想法。
麦克
答案 0 :(得分:2)
似乎您可能缺少TagName属性 如
<%@ Register TagPrefix="webstation" TagName="CollapsiblePanel" Namespace="MyApplication.webstation.WebControls" %>
一旦你这样做,你应该能够以
的形式访问它<webstations:CollapsiblePanel id='usercontrol1" runat="server" />
答案 1 :(得分:1)
查看Scott Gu关于注册控件的博客文章,我喜欢自己在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中注册用户控件,两个示例如下:
答案 2 :(得分:0)
一旦我继续在相同的解决方案中创建了一个类库项目,构建了项目,从类库的bin中复制了DLL并将其放在我的Web文件夹中,我能够像预期的那样工作用于保存外部二进制文件的项目。我还在项目中添加了对.dll的引用。一旦我这样做,那么语法:
<%@ Register Assembly="webstation.WebControls" Namespace="webstation.WebControls" TagPrefix="webstation" %>
开始工作了。有谁知道我是否能够以某种方式从同一解决方案中的类库中自动更新我的Web项目中的已编译.DLL?或者我每次都必须进入bin文件夹并手动将其复制到Web项目中?
谢谢,
麦克