Ошибка управления сервером ASP.NET: неизвестный тег сервера - PullRequest
4 голосов
/ 17 декабря 2011

Это моя первая попытка создать серверный элемент управления ASP.NET. Написание контрольного кода было простым, но я наткнулся на контрольно-пропускной пункт, пытаясь получить контроль на веб-странице.

Я собрал элемент управления в одном проекте и сослался на него в другом. Во втором проекте я поместил элемент управления в панель инструментов и перетащил элемент управления на страницу. Я могу скомпилировать веб-проект без ошибок, но когда я перехожу на страницу, я получаю эту ошибку:

Сообщение об ошибке анализатора: неизвестный тег сервера '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, снова с атрибутом 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);            
        }
    }
}

1 Ответ

6 голосов
/ 17 декабря 2011

Должно быть просто:

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