Как зарегистрировать пользовательский серверный элемент управления на странице ASP.NET - PullRequest
24 голосов
/ 11 марта 2011

У меня есть проект, и я пытаюсь зарегистрировать пользовательский серверный элемент управления (файл .ascx отсутствует) на странице.В настоящее время я использую

Объявление класса

namespace MyApp.Controls{
    public class CustomControl: WebControl{
        public string Text
        {
            get
            {
                String s = (String)ViewState["Text"];
                return ((s == null) ? String.Empty : s);
            }
            set
            {
                ViewState["Text"] = value;
            }
        }        
        protected override void RenderContents(HtmlTextWriter output)
        {
            output.Write(Text);
        }
    }
}

На моей странице

<%@ Register TagPrefix="myControls" Namespace="MyApp.Controls" %>
<myControls:CustomControl runat="server" Text="What up!" />

Я получаю сообщение об ошибке парсера с сообщением "Неизвестный тег сервера'myControls: CustomControl'. "

Что я делаю не так?

Ответы [ 4 ]

44 голосов
/ 11 марта 2011

Ну, если этот элемент управления находится в другой библиотеке классов, или даже если он находится в той же библиотеке, было бы неплохо указать сборку элемента управления в @Register:

<%@ Register TagPrefix="myControls" Namespace="MyApp.Controls" Assembly="MyApp" %>
   <myControls:CustomControl runat="server" Text="What's up!" />

Очистить иПерестройте свое решение, чтобы убедиться, что все правильно скомпилировано!

7 голосов
/ 30 апреля 2013

Если ваш элемент управления будет повторно использоваться на нескольких страницах, вы можете зарегистрировать его в web.config в качестве одного из подэлементов system.web / pages / controls вместо копирования и вставки одного и того же тега <@Register на всех затронутых страницах. . </p>

web.config:

<system.web>
  <pages ...>
    <controls>
      ...
      <add tagPrefix="myCompany" namespace="MyCompany.Whatever.Controls" assembly="Whatever"/>
    </controls>

thepage.aspx:

<myCompany:ControlClassName ID="TheStuff" runat="server" ... />
5 голосов
/ 11 марта 2011

Вы должны поместить свой элемент управления либо в папку App_Code (в случае, если элемент управления не находится в сборке), либо добавить ссылку на сборку, где этот элемент управления находится:

<%@ Register TagPrefix="myControls" Namespace="MyApp.Controls"
      Assembly="SomeAssembly" %>

Но, думаю, вашэлемент управления не находится в папке App_Code.

4 голосов
/ 11 марта 2011

Добавление атрибута сборки в ваш тег регистрации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...