ASP.NET C# 中的自定义控件
-
25-09-2019 - |
题
我创建了一个简单的自定义控件,它仅继承自 Literal
控件,并且还没有任何扩展,代码为空。
命名空间:自定义控件
班级名称:字面意思:System.Web.UI.WebControls.Literal
接下来我要做的就是在 aspx
页面如下:
<%@ Register TagPrefix="web" Namespace="CustomControls" %>
(我在一些教程中读到,除了 web.config 等之外,这是注册它的方法之一。)
毕竟,对我来说没有智慧,更糟糕的是 - 我收到解析错误“未知服务器标记:”web' 当我尝试运行带有控件的页面时。
我使用“创建新项目”而不是新网站,以防需要此信息。
我的问题可能是什么?
提前致谢。
解决方案
以下是我的做法,从无到有,一步一步做起。第一种方法使用第二个项目/程序集。对于 App_code 版本,向下滚动。
Web应用项目方法
- 创建一个新的 ASP.Net Web 应用程序。记下名字,我的叫WebApplication2。如果您已经有一个现有的 Web 应用程序(很可能),请双击项目的属性部分并检查“程序集名称”属性,并记下它。
- 在 Web 应用程序中创建一个名为 Literal.cs 的新类
为类定义添加类似于以下的代码:
namespace CustomControls { public class Literal : System.Web.UI.WebControls.Literal { } }
将以下注册标记添加到 aspx 页面的顶部
<%@ 注册程序集 =“WebApplication2”名称空间 =“CustomControls” tagprefix =“web” %>
如果您的程序集名称不同,请在此处更改。我注意到,当我在 VB.Net 中执行此操作时,命名空间是 WebApplication1.CustomControls,而不是像 C# 中那样只是 CustomControls,有点奇怪。
将新控件添加到您的页面:
<web:Literal ID="Literal1" runat="server" Text="test" />
单独项目法
- 创建一个新的空网站 (ASP.Net)。
- 将名为 CustomControls 的新 ASP.Net 服务器控件库添加到解决方案中。
向名为 Literal 的新项目添加一个新类(我使用的是 C#,因此我的文件名为 Literal.cs)。下面是我的超级基本代码,我相信它应该与问题中描述的代码相匹配。
namespace CustomControls { public class Literal : System.Web.UI.WebControls.Literal { } }
将 CustomControls 项目的引用添加到您的网站。
将程序集注册添加到 aspx 页面的顶部:
<%@ 注册程序集 =“CustomControls”namespace =“CustomControls”tagprefix =“web”%>
将控件的新实例添加到您的页面:
<web:Literal ID="Literal1" runat="server" Text="test" />
在App_Code方法中
- 创建一个新的空网站 (ASP.Net)。
将新类添加到 App_Code 文件夹 Literal2(我使用的是 C#,因此我的文件名为 Literal2.cs)。下面是我的超级基本代码,我相信它应该与问题中描述的代码相匹配。我将其称为 2,以便您可以将其与上述方法结合使用而不会出现编译错误
namespace CustomControls { public class Literal2 : System.Web.UI.WebControls.Literal { } }
通过将以下行添加到顶部,在您的 aspx 页面中注册 app_code 的程序集/命名空间
<%@ 注册命名空间="CustomControls" Assembly="__code" tagprefix="web" %>
将新控件的实例添加到您的页面:
<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" %>
。如果你有你的班级找到组装的名字是很难在这里有一些提示:
- 如果您所创建的Web应用程序的Visual Studio项目中的类,或者在一个单独的DLL(共享库)的项目,然后用鼠标右键单击该项目,并选择属性来获取程序集名称
- 如果您创建App_Code目录中的cs文件,
ASP.App_Code
应该工作
醇>
否则,请给我们介绍一下项目布局的一些信息!
做最简单的事情就是拖和拖放到Literal.ascx页面(如果该页面在相同的解决方案)。如果页面是另一种解决方案,可以将控件添加到工具箱VS和拖动和删除页面上的控制。
您忘记的src属性。
<%@ Register TagPrefix="web" Namespace="CustomControls" Src="PathToYourCustomControl" %>