2010-06-09 6 views
10

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

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

Название Класс: Буквенный: System.Web.UI.WebControls.Literal

Следующая вещь, которую я регистрирует этот контроль в aspx страницы следующим образом:

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

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

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

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

Что может быть моей проблемой?

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

+0

Что именно означает «создать новый проект»? Файл -> Новый -> Проект -> ... (по крайней мере, в VS 2005) А потом, что вы купили? Это может быть важно (т. Е. Вы выбрали Other Languages ​​-> Visual C# -> Web -> что??). И в какой-то момент вам нужна сборка; вопрос заключается в том, если вы должны явно называть его (и я думаю, что вам нужно, если вы не используете проект «Веб-сайт», поскольку у вас нет папки App_Code). – scherand

+0

Где ваш пользовательский класс управления существует? Это файл класса в проекте веб-сайта или он находится в собственном проекте? –

+0

Итак, у вас есть два проекта для «CustomControls» и еще один для веб-проекта? – Craig

ответ

25

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

Web Application Project Метод

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

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

    <% @ Регистрация сборки = " WebApplication2 " пространства имен = " CustomControls " tagprefix = " веб-"% >

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

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

    < веб: Буквенный ID = " Literal1 " RUNAT = " сервер " Text = " тест "/>

Seperate проекта Метод

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

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

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

    <% @ Register сборки = " CustomControls " пространства имен = " CustomControls " tagprefix = " веб "% >

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

    < web: Literal ID = " Literal1 " Runat = " сервер " Text = " тест "/>

В методе 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, добавив следующую строку в верхней

    <% @ Регистрация Namespace = " CustomControls " Ассамблея = " __code " tagprefix = " веб "% >

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

    < Веб: Literal2 ID = " literal2 " Runat = " сервер " Text = " test2 "/>

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

+0

Спасибо за подробную информацию, это отлично работает на веб-сайте проект. проблема связана с WebApplicationProject в VS2008. – Mahes

+1

@Mahes - я обновил свой ответ, включив направления веб-приложений (они находятся наверху). – Peter

+0

@Mahes - Пожалуйста, дайте мне знать, если код, который я написал, не работает для вас. – Peter

2

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

Спасибо за ответ, Дело в том, что у меня еще нет файла сборки, и, как я понял, элемент управления может быть зарегистрирован только тегом tagprefix и namespace, даже без сборки. я прав ? – geevee

+1

Если вы создали проект веб-приложения, у вас будет сборка, см.: http://dl.dropbox.com/u/6561262/project-settings.png – orjan

2

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

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

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

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

+0

спасибо. даже указание имени сборки не разрешает проблему с WebApplicationProject в VS2008 – Mahes

1

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

0

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

<%@ Register TagPrefix="web" Namespace="CustomControls" Src="PathToYourCustomControl" %> 
Смежные вопросы