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

命名空间:自定义控件

班级名称:字面意思:System.Web.UI.WebControls.Literal

接下来我要做的就是在 aspx 页面如下:

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

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

毕竟,对我来说没有智慧,更糟糕的是 - 我收到解析错误“未知服务器标记:”web' 当我尝试运行带有控件的页面时。

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

我的问题可能是什么?

提前致谢。

有帮助吗?

解决方案

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

Web应用项目方法

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

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

    <%@ 注册程序集 =“WebApplication2”名称空间 =“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”namespace =“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 的程序集/命名空间

    <%@ 注册命名空间="CustomControls" Assembly="__code" tagprefix="web" %>

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

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

我使用 Visual Studio 对此进行了测试,一切对我来说都运行良好。

其他提示

您还可以注册在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" />

问题出在你的<%@ Register TagPrefix="web" Namespace="CustomControls" %>标签:它忽略程序集名称

必须成为<%@ Register TagPrefix="web" Namespace="CustomControls" Assembly="YourAssemblyName" %>。如果你有你的班级找到组装的名字是很难在这里有一些提示:

  1. 如果您所创建的Web应用程序的Visual Studio项目中的类,或者在一个单独的DLL(共享库)的项目,然后用鼠标右键单击该项目,并选择属性来获取程序集名称
  2. 如果您创建App_Code目录中的cs文件,ASP.App_Code应该工作
  3. 否则,请给我们介绍一下项目布局的一些信息!

做最简单的事情就是拖和拖放到Literal.ascx页面(如果该页面在相同的解决方案)。如果页面是另一种解决方案,可以将控件添加到工具箱VS和拖动和删除页面上的控制。

您忘记的src属性。

<%@ Register TagPrefix="web" Namespace="CustomControls" Src="PathToYourCustomControl" %> 
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top