注册复合控件

3

我正在学习自定义控件,并且刚刚完成了我的第一个。问题是我在注册它到我的Web Config文件时遇到了困难,编译器无法识别它。目前这导致YSOD(黄屏错误)关于对控件的引用。

注意:具体错误 - Error Unknown server tag 'cc:LblTextBox'。

谢谢!

Web Config

//..
//..
     <pages>
       <controls>
         <add tagPrefix="cc" namespace="Controls.Server"/>
       </controls>
     </pages>
</system.web>

控件代码后端

namespace Controls.Server
{
    public class LblTextBox : CompositeControl
    {
       //...
    }
}

标记语言
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ControlsMain.aspx.cs" Inherits="Pages_ControlsMain" Trace="true" %>

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head runat="server">
     <title>Controls Area</title>
 </head>
 <body>
    <form id="form1" runat="server">
    <div>
          First attempt at a simple composite control <br />
         <cc:LblTextBox ID="ccLblTbHybrid" runat="server" LabelText="Name:" />
   </div>
   </form>
 </body>

2个回答

1

尝试在页面顶部注册您的组合控件:

<%@ Register cc="myControls" Namespace="Controls.Server" %>

你也可以尝试在 web.config 中指定程序集:

<add tagPrefix="cc" namespace="Controls.Server" assembly="whatever"/>

汇编引发了另一个问题。我注意到当我创建新文件夹并将代码放入其中时,它们没有自动生成命名空间。我必须手动分配一个。通常我从来没有这样做过。有可能是因为我没有程序集名称,所以它无法引用程序集中的命名空间吗?只是随便想想。 - Matthew Cox
另外需要注意的是,该项目是一个ASP.net网站项目。据我所知,程序集dll文件并没有预编译...这会影响我如何注册命名空间吗? - Matthew Cox
你的答案部分正确!我发布了完整的解决方案。 - Matthew Cox

0
问题源于将项目设置为ASP.Net网站。
这有一个缺点,因为直到运行时才知道程序集的名称。
我将项目重新创建为ASP.Net Web应用程序,允许对DLL进行预编译...从而使我能够为项目命名空间。
然后我将abe的建议添加到条目中,现在一切都正常工作了。
<add tagPrefix="cc" namespace="Controls.Server" assembly="DevLore"/>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接