C# ASP.NET服务器控制错误:未知的服务器标记

C# ASP.NET服务器控制错误:未知的服务器标记,c#,asp.net,custom-controls,C#,Asp.net,Custom Controls,这是我第一次尝试构建ASP.NET服务器控件。编写控制代码很简单,但我在尝试在网页上获取控制时遇到了障碍 我在一个项目中构建控件,并在另一个项目中引用它。在第二个项目中,我将控件放入工具箱,并将控件拖放到页面上。我可以毫无错误地编译web项目,但当我浏览到该页面时,会出现以下错误: 分析器错误消息:未知的服务器标记“cc1:StandardControl1” 环顾四周,我看到其他人由于各种原因有这个问题,但似乎没有一个适用于我的情况。一种解决方案是将程序集添加到register标记,但这不是我的

这是我第一次尝试构建ASP.NET服务器控件。编写控制代码很简单,但我在尝试在网页上获取控制时遇到了障碍

我在一个项目中构建控件,并在另一个项目中引用它。在第二个项目中,我将控件放入工具箱,并将控件拖放到页面上。我可以毫无错误地编译web项目,但当我浏览到该页面时,会出现以下错误:

分析器错误消息:未知的服务器标记“cc1:StandardControl1”

环顾四周,我看到其他人由于各种原因有这个问题,但似乎没有一个适用于我的情况。一种解决方案是将程序集添加到register标记,但这不是我的页面的问题:

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="another.aspx.vb" Inherits="Educate.another" %>
<%@ Register Assembly="ServerControlSandbox" Namespace="ServerControlSandbox" TagPrefix="cc1" %>

<!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></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <cc1:StandardControl1 runat="server">
        </cc1:StandardControl1>
    </div>
    </form>
</body>
</html>

另一个解决方案是将其添加到web.config,同样使用assembly属性。但是在我的web.config中,我仍然得到了错误:

<controls>
        <add tagPrefix="cc1" namespace="ServerControlSandbox" assembly="ServerControlSandbox"/>
                <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"/>
            </controls>

我在想我遗漏了一些简单的东西,但从我看过的例子来看,我看不出有什么错。有人有什么想法吗?谢谢

此外,以下是控制代码:

namespace ServerControlSandbox
{
    [DefaultProperty("Text")]
    [ToolboxData("<{0}:StandardControl1 runat=server></{0}:StandardControl1>")]
    public class StandardControl : WebControl
    {
        [Bindable(true)]
        [Category("Appearance")]
        [DefaultValue("")]
        [Localizable(true)]
        public string Text
        {
            get
            {
                String s = (String)ViewState["Text"];
                return ((s == null) ? "[" + this.ID + "]" : s);
            }

            set
            {
                ViewState["Text"] = value;
            }
        }

        protected override void RenderContents(HtmlTextWriter output)
        {
            output.Write(Text);

            string block = "<p>Here is some text.</p>";
            output.Write(block);            
        }
    }
}
命名空间服务器控制沙盒
{
[默认属性(“文本”)]
[ToolboxData(“”)
公共类标准控制:网络控制
{
[可装订(真实)]
[类别(“外观”)]
[默认值(“”)
[可本地化(正确)]
公共字符串文本
{
得到
{
字符串s=(字符串)视图状态[“文本”];
返回((s==null)“[”+this.ID+“]”:s);
}
设置
{
ViewState[“文本”]=值;
}
}
受保护的覆盖无效渲染内容(HtmlTextWriter输出)
{
输出。写入(文本);
string block=“这里有一些文本。

”; 输出。写入(块); } } }
应该是:

<cc1:StandardControl ID="scSomething" runat="server">
</cc1:StandardControl>


+1是;命名空间ServerControlSandbox中没有控件,其类名为StandardControl1-解析器就是这样工作的-它在您在提供的命名空间中指定的程序集中的cc1:前缀后查找类名-我打赌IDE出于某种原因添加了它。感谢@dash:)的解释——是的,他们的“StandardControl1”是由IDE放在那里的。我会在很长一段时间里把头撞在墙上找那个。谢谢旧问题,但由于
ToolboxData
属性,它将
StandardControl1
放入。