【问题标题】:ASP.NET Server control error: Unknown server tagASP.NET 服务器控件错误:未知的服务器标记
【发布时间】:2012-01-22 08:49:32
【问题描述】:

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

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

解析器错误消息:未知的服务器标记 'cc1:StandardControl1'。

环顾四周,我发现其他人由于各种原因遇到此问题,但似乎都不适用于我的情况。一种解决方案是将程序集添加到注册标签,但这不是我的页面的问题:

<%@ 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,再次使用程序集属性。但是在我的 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);            
        }
    }
}

【问题讨论】:

    标签: c# asp.net custom-controls


    【解决方案1】:

    应该只是:

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

    【讨论】:

    • +1 是;命名空间 ServerControlSandbox 中没有类名为 StandardControl1 的控件 - 这就是解析器的工作方式 - 它在您在提供的命名空间中指定的程序集中查找 cc1: 前缀之后的类名 - 我敢打赌 IDE 出于某种原因添加了.
    • 感谢@dash 的解释 :)
    • 成功了——是的,IDE 将它们的“StandardControl1”放入其中。我会用头撞墙很长时间寻找那个。谢谢!
    • 老问题,但由于 ToolboxData 属性,它输入了 StandardControl1
    猜你喜欢
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多