Пользовательский элемент управления в ASP.NET C # - PullRequest
10 голосов
/ 09 июня 2010

Я создал простой пользовательский элемент управления, который наследуется только от элемента управления Literal и еще не имеет расширений, код пуст.

Пространство имен: CustomControls

Имя класса:Литерал: System.Web.UI.WebControls.Literal

Далее я регистрирую этот элемент управления на странице aspx следующим образом:

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

(я читал в нескольких руководствах, которыеэто один из способов его регистрации, кроме web.config и т. д.)

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

Я использовал «создать новый проект», а не новый веб-сайт, на случай, если понадобится эта информация.

В чем может быть моя проблема?

Заранее спасибо.

Ответы [ 5 ]

27 голосов
/ 05 января 2011

Вот как я это сделал, шаг за шагом, начиная с нуля.Этот первый метод использует второй проект / сборку.Для версии App_code прокрутите вниз.

Метод проекта веб-приложения

  1. Создайте новое веб-приложение ASP.Net.Обратите внимание на имя, мое называется WebApplication2.Если у вас уже есть веб-приложение, которое, вероятно, дважды щелкните по разделу свойств вашего проекта и проверьте свойство «Имя сборки», запишите его.
  2. Создайте новый класс в веб-приложении с именемLiteral.cs
  3. Введите код, подобный следующему для определения класса:

    namespace CustomControls
    {
        public class Literal : System.Web.UI.WebControls.Literal
        {
        }
    }
    
  4. Добавьте следующий тег регистрации в начало вашего aspxpage

    <% @ Register assembly = "WebApplication2" namespace = "CustomControls" tagprefix = "web"%>

Если имя вашей сборки было другим, измените его здесь,Я заметил, что когда я делал это в VB.Net, пространство имен было WebApplication1.CustomControls, а не просто CustomControls, как это было в C #, что-то странное.

  1. Добавить новый элемент управления на свою страницу:

Метод отдельного проекта

  1. Создание нового пустого веб-сайта (ASP.Net).
  2. Добавление новогоБиблиотека ASP.Net Server Control с именем CustomControls для решения.
  3. Добавьте новый класс в новый проект с именем Literal (я использую C #, поэтому мой файл называется Literal.cs).Ниже приведен мой супер базовый код, который, я считаю, должен соответствовать коду, описанному в вопросе.

    namespace CustomControls
    {
        public class Literal : System.Web.UI.WebControls.Literal
        {
        }
    }
    
  4. Добавьте ссылку на проект CustomControls на свой веб-сайт.

  5. Добавьте регистрацию сборки в начало страницы aspx:

    <% @ Register assembly = "CustomControls" namespace = "CustomControls" tagprefix = "web"%>

  6. Добавьте новый экземпляр элемента управления на свою страницу:

В методе App_Code

  1. Создать новый пустой веб-сайт (ASP.Net).
  2. Добавьте новый класс в папку App_Code Literal2 (я использую C #, поэтому мой файл называется Literal2.cs).Ниже приведен мой супер базовый код, который, я считаю, должен соответствовать коду, описанному в вопросе.Я назвал его 2, чтобы вы могли использовать его в сочетании с описанным выше способом, не получая ошибок компиляции

    namespace CustomControls
    {
        public class Literal2 : System.Web.UI.WebControls.Literal
        {
        }
    }
    
  3. Зарегистрируйте сборку / пространство имен для app_code на странице aspx, добавивследующая строка вверх

    <% @ Register Namespace = "CustomControls" Assembly = "__ code" tagprefix = "web"%>

  4. Добавить экземпляр новогоконтроль на вашей странице:

Я проверил это с помощью Visual Studio, и у меня все заработало.

2 голосов
/ 05 января 2011

Проблема заключается в вашем теге <%@ Register TagPrefix="web" Namespace="CustomControls" %>: он пропускает имя сборки!

Он должен стать <%@ Register TagPrefix="web" Namespace="CustomControls" Assembly="YourAssemblyName" %>.Если у вас возникли трудности с поиском имени сборки для вашего класса, вот несколько советов:

  1. Если вы создали класс внутри проекта Visual Studio веб-приложения или в отдельном проекте DLL (общая библиотека),затем щелкните правой кнопкой мыши проект и перейдите в Свойства, чтобы получить имя сборки
  2. Если вы создали файл .cs в каталоге App_Code, ASP.App_Code должен работать

В противном случае, пожалуйста, дайте намнемного информации о макете проекта!

2 голосов
/ 09 июня 2010

Вы также можете зарегистрировать свой элемент управления в 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>

Для веб-сайта это будет работать

<add tagPrefix ="web" namespace="ASP.App_Code.CustomControls" />
1 голос
/ 07 января 2011

Самое простое, что можно сделать, это перетащить файл Literal.ascx на страницу (если страница находится в том же решении). Если страница является другим решением, вы можете добавить элемент управления в панель инструментов VS иперетащите элемент управления на страницу.

0 голосов
/ 11 января 2011

Вы забыли атрибут src.

<%@ Register TagPrefix="web" Namespace="CustomControls" Src="PathToYourCustomControl" %> 
...