C# ASP.NET自定义控件-未知的服务器标记
我创建了一个从文本控件继承的自定义控件。当我尝试在页面上使用我的控件时,会抛出一个解析错误。我已将此添加到我的web.configC# ASP.NET自定义控件-未知的服务器标记,c#,asp.net,custom-controls,C#,Asp.net,Custom Controls,我创建了一个从文本控件继承的自定义控件。当我尝试在页面上使用我的控件时,会抛出一个解析错误。我已将此添加到我的web.config <configuration> <system.web> <pages> <controls> <add tagPrefix="one" namespace="myApplication.Controls"/> </controls>
<configuration>
<system.web>
<pages>
<controls>
<add tagPrefix="one" namespace="myApplication.Controls"/>
</controls>
</pages>
</system.web>
</configuration>
在添加名称空间时,我发现我还需要程序集。如果您的程序集也是
myApplication
,请在web.config中执行此操作:
<add tagPrefix="one" namespace="myApplication.Controls" assembly="myApplication"/>
然后,只是清理和重建,它应该都工作。一旦它在web.config中,您就不需要将其添加到页面中,除非您在同一目录中的控件中使用它,然后您将需要在web表单顶部的引用。但是,我建议不要在与用户控件相同的目录中使用自定义服务器控件。如果我理解正确,您的控件是否在同一个项目中 尝试在页面标记中使用以下内容注册控件:
<%@ Register Src="~/controls/foo.ascx" TagName="foo" TagPrefix="uc" %>
使用
可以将控件包含到标记中。
如果这不起作用,您的控件可能无法编译。注释掉不必要的内容,然后再试一次。我在发布ASP.NET Web表单应用程序时也遇到了这个问题。即使将文件夹复制并粘贴到服务器的IIS中,而不发布它,使用自定义控件/用户控件的页面上也会系统地出现类似问题 我在web.config和我的开发机器上正确注册了控件,一切正常。我认为注册过程还可以 若要修复发布/复制和过去部署过程中的问题,您应该在使用它们的每个页面(.aspx)上重新注册所有用户控件的命名空间和程序集:
<%@ Register TagPrefix="mycompany" Namespace="MyCompany.Web.Forms.Controls" Assembly="MyCompany.Web" %>
<%@ Register TagPrefix="mycomapny" Namespace="MyCompany.Web.Forms.Controls.ValidatorComponents" Assembly="MyCompany.Web" %>
请注意,自定义控件或用户控件的思维方式是相同的。这个问题甚至发生在VS 2012,但仍然是.NET 4.0。当ASP.NET皮肤引用此类控件时,也需要此过程。我收到了作为项目一部分的用户控件的“未知服务器标记”错误。没有外部组件@citronas提到“如果这不起作用,您的控件可能无法编译”,这也是中列出的最可能的原因
虽然我的控制代码在编译时没有出现错误,但事实证明我忽略了一些警告。我的警告是关于我的控制文件夹中引用另一个丢失文件的资源文件。一旦我解决了警告问题,那么控件就正确编译了,我可以使用该控件,只需一个寄存器指令,而不需要修改web.config,如下所示:
<%@ Register TagPrefix="myPrefix" TagName="myControl" Src="~/controls/mySourceFile.ascx" %>
<myPrefix:myControl runat="server"></myPrefix:myControl>
在我的例子中,应用程序是在本地模式下运行的,发布时从用户控件标记中得到了相同的错误
在评论用户控件标记时,注意到另一个位置存在路径错误。在解决了另一个问题并取消了对用户控件标记的注释后,它成功了。显示的错误似乎不相关 我们需要您正在编写的使用实际控件=)的代码ascx页面和代码在外部程序集中?这太奇怪了,它需要程序集,即使控件在应用程序中。感谢您的帮助。
一旦它进入您的web.config,您就不需要将其添加到您的页面
对我来说,这就是它无法工作的原因。。thanksIt不是我试图在页面上使用的web控件。它是从System.Web.UI.WebControl.Literal类继承的自定义控件。
<%@ Register Src="~/controls/foo.ascx" TagName="foo" TagPrefix="uc" %>
<%@ Register TagPrefix="mycompany" Namespace="MyCompany.Web.Forms.Controls" Assembly="MyCompany.Web" %>
<%@ Register TagPrefix="mycomapny" Namespace="MyCompany.Web.Forms.Controls.ValidatorComponents" Assembly="MyCompany.Web" %>
<%@ Register TagPrefix="myPrefix" TagName="myControl" Src="~/controls/mySourceFile.ascx" %>
<myPrefix:myControl runat="server"></myPrefix:myControl>