11

我创建了一个简单的自定义控件,它只继承自Literal控件,还没有任何扩展,代码是空的。

命名空间:自定义控件

类名:字面量:System.Web.UI.WebControls.Literal

接下来我要做的是在aspx页面中注册这个控件,如下所示:

<%@ Register TagPrefix="web" Namespace="CustomControls" %>

(我在几个教程中读到这是注册它的方法之一,除了 web.config 等。)

毕竟,对我来说没有智能,更糟糕的是 - 当我尝试运行包含控件的页面时,我得到一个解析错误“未知的服务器标签:web”。

如果需要此信息,我使用了“创建新项目”而不是新网站。

我的问题可能是什么?

提前致谢。

4

5 回答 5

28

这是我如何做到的,一步一步从无到有。第一种方法使用第二个项目/程序集。对于 App_code 版本,向下滚动。

Web应用项目方法

  1. 创建一个新的 ASP.Net Web 应用程序。记下名字,我的叫 WebApplication2。如果您已经有一个现有的 Web 应用程序(很可能),请双击项目的属性部分并检查“程序集名称”属性,并记下它。
  2. 在名为 Literal.cs 的 Web 应用程序中创建一个新类
  3. 为类定义输入类似于以下的代码:

    namespace CustomControls
    {
        public class Literal : System.Web.UI.WebControls.Literal
        {
        }
    }
    
  4. 将以下注册标记添加到您的 aspx 页面顶部

    <%@ 注册程序集="WebApplication2" namespace="CustomControls" tagprefix="web" %>

如果您的程序集名称不同,请在此处更改。我注意到当我在 VB.Net 中执行此操作时,命名空间是 WebApplication1.CustomControls 而不是像在 C# 中那样只是 CustomControls,有点奇怪。

  1. 将新控件添加到您的页面:

    <web:Literal ID="Literal1" runat="server" Text="test" />

分离项目法

  1. 创建一个新的空网站 (ASP.Net)。
  2. 将名为 CustomControls 的新 ASP.Net 服务器控件库添加到解决方案中。
  3. 向名为 Literal 的新项目添加一个新类(我使用的是 C#,因此我的文件名为 Literal.cs)。下面是我的超级基本代码,我认为应该与问题中描述的代码相匹配。

    namespace CustomControls
    {
        public class Literal : System.Web.UI.WebControls.Literal
        {
        }
    }
    
  4. 将 CustomControls 项目的引用添加到您的网站。

  5. 将程序集注册添加到您的 aspx 页面顶部:

    <%@ 注册程序集="CustomControls" 命名空间="CustomControls" tagprefix="web" %>

  6. 将控件的新实例添加到您的页面:

    <web:Literal ID="Literal1" runat="server" Text="test" />

在 App_Code 方法中

  1. 创建一个新的空网站 (ASP.Net)。
  2. 向 App_Code 文件夹 Literal2 添加一个新类(我使用的是 C#,因此我的文件名为 Literal2.cs)。下面是我的超级基本代码,我认为应该与问题中描述的代码相匹配。我将其称为 2,以便您可以将其与上述方法结合使用而不会出现编译错误

    namespace CustomControls
    {
        public class Literal2 : System.Web.UI.WebControls.Literal
        {
        }
    }
    
  3. 通过将以下行添加到顶部,在您的 aspx 页面中注册 app_code 的程序集/命名空间

    <%@ Register Namespace="CustomControls" Assembly="__code" tagprefix="web" %>

  4. 将新控件的实例添加到您的页面:

    <web:Literal2 ID="literal2" runat="server" Text="test2" />

我使用Visual Studio对此进行了测试,对我来说一切正常。

于 2011-01-05T15:27:40.467 回答
2

如果您想在其他页面上使用它,也可以在 web.config 中注册您的控件

<pages>
        <controls>
          <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
          <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
          <add tagPrefix="web" namespace="MyProject.CustomControls" assembly="MyProject" />
        </controls>
      </pages>

对于网站,这将起作用

<add tagPrefix ="web" namespace="ASP.App_Code.CustomControls" />
于 2010-06-09T05:58:02.540 回答
2

问题在于您的<%@ Register TagPrefix="web" Namespace="CustomControls" %>标签:它错过了程序集名称!

它必须成为<%@ Register TagPrefix="web" Namespace="CustomControls" Assembly="YourAssemblyName" %>. 如果您在查找类的程序集名称时遇到困难,这里有一些提示:

  1. 如果您在 Web 应用程序的 Visual Studio 项目中或在单独的 DLL(共享库)项目中创建了该类,则右键单击该项目并转到“属性”以获取程序集名称
  2. 如果您在 App_Code 目录中创建了 .cs 文件,ASP.App_Code应该可以

否则请给我们一些关于项目布局的信息!

于 2011-01-05T15:47:13.917 回答
1

最简单的方法是将 Literal.ascx 拖放到页面上(如果页面在同一个解决方案中)。如果页面是另一个解决方案,您可以将控件添加到 VS 工具箱并拖放- 将控件放在页面上。

于 2011-01-07T12:02:18.970 回答
0

您忘记了 src 属性。

<%@ Register TagPrefix="web" Namespace="CustomControls" Src="PathToYourCustomControl" %> 
于 2011-01-11T12:27:31.073 回答