【问题标题】:How do I get ASP.NET to recognize my custom server control?如何让 ASP.NET 识别我的自定义服务器控件?
【发布时间】:2010-12-06 18:23:56
【问题描述】:

我正在尝试创建我的第一个从面板派生的 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 文件中

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

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

迈克

【问题讨论】:

    标签: asp.net custom-server-controls


    【解决方案1】:

    您似乎缺少 TagName 属性 作为

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

    一旦你这样做了,你应该可以访问它

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

    【讨论】:

    • 我不确定我是否应该拥有 TagName,因为我希望它提供我将在命名空间中拥有的所有类,而不必单独注册每个类。另外,ASP.net 上的教程视频也不使用 TagName:asp.net/learn/videos/video-297.aspx
    • 如果您想在给定的命名空间中注册 所有 类,我相信您需要在 @Register 指令中提供程序集属性。所以类似于 Assembly="MyApplication.webstation.WebControls",假设 WebControls 是一个生成 DLL 作为输出的项目。
    • 你说得对,迈克,你不需要指定标记名,但你需要指定程序集。我刚刚尝试过,在我为我的 dll 添加程序集属性后它工作了
    • 我也尝试过使用 Assembly 属性,但没有成功。此控件当前不是类库或已编译 DLL 的一部分,它只是项目中包含的一个 .vb 文件。如果/当我开发更多控件时,我打算使用一次类库,但现在感觉有点矫枉过正,因为我只有一个控件,而且我只在一个项目中使用它。它必须在类库中才能在 Web 应用程序中工作吗?
    • @Mike 你应该阅读 MSDN 文档 - 它涵盖了所有可能的情况。 msdn.microsoft.com/en-us/library/c76dd5k1.aspx
    【解决方案2】:

    查看 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 中注册用户控件,两个示例如下:

    【讨论】:

      【解决方案3】:

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

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

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

      谢谢,

      迈克

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-10
        • 2015-08-15
        相关资源
        最近更新 更多