Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET C中的自定义控件#_Asp.net_Custom Controls_Parse Error_Extending Classes - Fatal编程技术网

ASP.NET C中的自定义控件#

ASP.NET C中的自定义控件#,asp.net,custom-controls,parse-error,extending-classes,Asp.net,Custom Controls,Parse Error,Extending Classes,我创建了一个简单的自定义控件,它只继承Literal控件,并且没有任何扩展,因为代码是空的 命名空间:自定义控件 类名:Literal:System.Web.UI.WebControls.Literal 接下来我要做的是在aspx页面中注册此控件,如下所示: <%@ Register TagPrefix="web" Namespace="CustomControls" %> (我在一些教程中读到,除了web.config等,这是注册它的方法之一。) 毕竟,对我来说没有智能,更糟

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

命名空间:自定义控件

类名:Literal:System.Web.UI.WebControls.Literal

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

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

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

毕竟,对我来说没有智能,更糟糕的是,当我尝试运行包含控件的页面时,我会遇到一个解析错误“unknown server tag:web”

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

我有什么问题


提前感谢。

如果您想在其他页面上使用控件,也可以在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>

对于web站点,这将起作用

<add tagPrefix ="web" namespace="ASP.App_Code.CustomControls" />

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

Web应用程序项目方法

  • 创建新的ASP.Net Web应用程序。注意这个名字,我的名字叫WebApplication2。如果您已经有一个现有的web应用程序(很可能),请双击项目的“属性”部分并选中“程序集名称”属性,记下它
  • 在web应用程序中创建一个名为Literal.cs的新类
  • 为类防御输入与以下类似的代码:

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

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

  • 将新控件添加到页面:

  • 独立项目法

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

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

  • 将程序集注册添加到aspx页面顶部:

  • 将控件的新实例添加到页面:

  • 应用程序内编码方法

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

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

  • 将新控件的实例添加到页面:


  • 我使用visual studio对此进行了测试,结果一切正常。

    问题在于您的
    标记:它缺少程序集名称

    它必须成为
    。如果您在查找类的程序集名称时遇到困难,以下是一些提示:

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

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

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

    您忘记了src属性

    <%@ Register TagPrefix="web" Namespace="CustomControls" Src="PathToYourCustomControl" %> 
    
    
    
    感谢您的回复,问题是-我还没有任何程序集文件,据我所知,控件只能通过tagprefix和名称空间注册,即使没有程序集。我说的对吗?如果您已经创建了一个web应用程序项目,您将拥有一个程序集,请参见:您所说的“创建新项目”到底是什么意思?文件->新建->项目->。。。(至少在VS2005)然后,你说了什么?这可能很重要(例如,您是否选择了其他语言->Visual C->Web->其他语言?)。你确实需要在某一点上组装;问题是你是否必须明确地命名它(我认为如果你没有使用“网站”项目,因为你没有App_代码文件夹,那么你必须这么做)。你的自定义控件类存在于哪里?它是网站项目中的类文件还是它自己的项目中的类文件?那么你有两个项目,一个是“CustomControls”,另一个是web项目?@scherand:我想他的意思是他是作为web应用程序项目而不是网站项目来做的。这两者的行为有点不同。问题发生在VS2008中的WebApplicationProject中。谢谢。即使指定程序集名称也不能解决VS2008中WebApplicationProject的问题。感谢您提供的详细信息,这在web站点项目中非常有效。问题在于VS2008中的WebApplicationProject。@Mahes-我已更新了答案,以包括Web应用程序说明(位于顶部)。@Mahes-如果我发布的代码不适用于您,请告诉我。