1

我正在尝试创建从 Panel 派生的第一个 ASP.net 服务器控件。出于某种原因,即使应用程序识别出我的控件的类和命名空间,我也无法让 .aspx 页面识别我的服务器标记。

以下是我使用的步骤:

1) 我创建了一个类 CollapsablePanel,并将其放在我的 site_code 目录中。我使用的是 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) 访问该类,则自定义控件会出现在智能感知中,因此我知道 Visual Studio 在某种程度上正在读取类信息。

我在这里做错了什么?任何想法都非常感谢。

麦克风

4

3 回答 3

2

似乎您可能缺少 TagName 属性

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

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

<webstations:CollapsiblePanel id='usercontrol1" runat="server" />
于 2009-10-14T17:32:52.983 回答
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 中注册用户控件,两个示例如下:

于 2009-10-14T17:38:42.527 回答
0

一旦我继续在同一个解决方案中创建一个类库项目,构建项目,从类库的 bin 中复制 DLL 并将其放置在我的 Web 项目的文件夹中,我就能够让它按预期工作持有外部二进制文件。我还在项目中添加了对 .dll 的引用。一旦我这样做了,那么语法:

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

开始工作。有谁知道我是否能够以某种方式从同一解决方案中的类库自动更新我的 Web 项目中已编译的 .DLL?还是我每次只需要进入 bin 文件夹并手动将其复制到 Web 项目中?

谢谢,

麦克风

于 2009-10-14T19:31:01.473 回答