Ошибка регистрации пользовательских элементов управления

Я пытаюсь зарегистрировать свои пользовательские элементы управления в файле webconfig, потому что я получаю сообщение об ошибке «Элемент не существует», но я получаю следующую ошибку, когда пытаюсь зарегистрировать их в файле webconfig:

Invalid or missing attributes found in the tagPrefix entry. For user control, you must also specify 'tagName' and 'src'. For custom control, you must also specify 'namespace', and optionally 'assembly'

Ниже приведен код в файле webconfig:

<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="IPAMControl" tagName="contact_us" namespace="IPAM.Website.Controls" src="~/controls/contact_us.ascx" />
    <add tagPrefix="IPAMControl" tagName="erh_list" namespace="IPAM.Website.Controls" src="~/controls/erh_list.ascx" />
    <add tagPrefix="IPAMControl" tagName="header" namespace="IPAM.Website.Controls" src="~/controls/header.ascx" />
    <add tagPrefix="IPAMControl" tagName="footer" namespace="IPAM.Website.Controls" src="~/controls/footer.ascx" />
    <add tagPrefix="IPAMControl" tagName="main_tnavbar" namespace="IPAM.Website.Controls" src="~/controls/main_tnavbar.ascx" />
    <add tagPrefix="IPAMControl" tagName="program_header" namespace="IPAM.Website.Controls" src="~/controls/program_header.ascx" />
    <add tagPrefix="IPAMControl" tagName="program_list" namespace="IPAM.Website.Controls" src="~/controls/program_list.ascx" />
    <add tagPrefix="IPAMControl" tagName="signup_section" namespace="IPAM.Website.Controls" src="~/controls/signup_section.ascx" />
    <add tagPrefix="IPAMControl" tagName="speaker_list" namespace="IPAM.Website.Controls" src="~/controls/speaker_list.ascx" />
    <add tagPrefix="IPAMControl" tagName="track" namespace="IPAM.Website.Controls" src="~/controls/track.ascx" />
  </controls>
</pages>

Страницы, на которых возникла эта проблема, также ссылаются на мастер-страницы, если это вообще имеет значение:

<%@ Page Language="C#" AutoEventWireup="true" MasterPageFile="~/programs/MasterProgram.master" CodeBehind="~/programs/wim2011/default.aspx" Inherits="IPAM.Website.programs.wim2011._default" %>

и они находятся каждый в своих папках.

Пожалуйста помоги.


person mattgcon    schedule 14.09.2010    source источник


Ответы (1)


Избавьтесь от атрибута пространства имен, так как он сбивает с толку ASP.NET относительно того, пытаетесь ли вы зарегистрировать пользовательский элемент управления или пользовательский элемент управления.

Пользовательский контроль:

<add tagPrefix="SomeTagPrefix" src="~/Controls/SomeControl.ascx" tagName="SomeTagName"/>

Пользовательский контроль:

<add tagPrefix="SomeTagPrefix" namespace="SomeNamespace" assembly="SomeAssembly"/>

Итак, в вашем примере:

<add tagPrefix="IPAMControl" tagName="track" src="~/controls/track.ascx" />

А в ASPX/ASCX вы используете это так:

<IPAMControl:track id="ipamTrack" runat="server" />

См. здесь для получения дополнительной информации.

ИЗМЕНИТЬ

Чтобы доказать, что это работает, я сделал следующее:

  1. Создать новое веб-приложение
  2. Создайте новую папку под названием «Controls» в корне веб-приложения.
  3. Добавлен новый «Web User Control» под названием «MyUserControl.ascx».
  4. Изменен web.config для добавления регистрации управления
  5. Изменен Default.aspx для добавления элемента управления.

И все работает нормально.

Вот пользовательский контроль:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="MyUserControl.ascx.cs" Inherits="WebApplication1.Controls.MyUserControl" %>
<span>Hi, im a user control, how are you?</span>

Вот часть web.config, которую я редактировал:

<pages>
      <controls>
        <add tagPrefix="MyControls" tagName="MyUserControl" src="~/Controls/MyUserControl.ascx"/>
      </controls>
    </pages>

Вот изменение Default.aspx, которое я сделал:

<MyControls:MyUserControl id="myUserControl" runat="server" />

И страница отображается правильно.

Теперь, если то, что я сделал здесь, не отличается от того, как вы пытаетесь это сделать, у вас должны быть другие коды/ошибки, которые мешают этому.

Не знаю, чем еще я могу помочь.

person RPM1984    schedule 14.09.2010
comment
Я попробовал ваше предложение, но я все еще получаю сообщение об ошибке. На самом деле, когда я иду использовать этот зарегистрированный элемент управления, IPAMControl не отображается в Intellisense. и ссылка, на которую вы ссылались, - это именно та, на которую я ссылался для этого :) - person mattgcon; 14.09.2010
comment
@mattgcon - у меня есть несколько регистраций в моей веб-конфигурации, как и мой ответ. Попробуйте удалить все объявления пользовательского контроля, убедитесь, что веб-сайт работает (это гарантирует, что что-то еще не вызывает проблем). затем добавьте элементы управления по одному. - person RPM1984; 14.09.2010
comment
правильно удалить все объявления пользовательского контроля со всех страниц? - person mattgcon; 14.09.2010
comment
Я очень расстроен, я удалил объявления пользовательского контроля с одной из страниц и не вижу ‹IPAMControl:track. Что я делаю неправильно? - person mattgcon; 14.09.2010
comment
вы получаете сообщение об ошибке в файле web.config или на страницах, которые вы пытаетесь добавить? Я имел в виду удалить все объявления из web.config, заставить ваш веб-сайт/страницы работать, а затем перейти оттуда. - person RPM1984; 14.09.2010
comment
Я получаю сообщения об ошибках на отдельных страницах, а не в файле web.config. Либо я получаю сообщение об ошибке «Элемент неизвестен» (на отдельной странице), либо я получаю сообщение об ошибке «Недействительный или отсутствующий атрибут» (когда они находятся в файле web.config) - person mattgcon; 14.09.2010
comment
хорошо - так что, как только вы исправите web.config (как в моем ответе), создайте простую страницу ASPX. ни главной страницы, ничего. просто. затем включите элемент управления, как в моем ответе. это работает? (когда я получаю подобные ошибки, я пытаюсь устранить все зависимости/другой код, чтобы они не мешали) - person RPM1984; 15.09.2010
comment
Нет, это тоже не работает, я создал простую страницу aspx, в нее ничего не было помещено, кроме ‹%@ Register TagPrefix=myControl TagName=header Src=~/Controls/header.ascx %›, и она все еще не работала - person mattgcon; 15.09.2010
comment
ну держись. чувак, тебе не нужно снова регистрировать элемент управления в ASPX, в этом весь смысл добавления его в web.config. знак равно - person RPM1984; 15.09.2010
comment
когда я говорю включить элемент управления, я имею в виду включение HTML элемента управления (IPAMControl:track), а не его повторную регистрацию. - person RPM1984; 15.09.2010
comment
О, я думал, что вы сказали удалить их из файла webconfig? ой извини моя вина. попробую прямо сейчас - person mattgcon; 15.09.2010
comment
Я только что попробовал, и я получаю элемент с неизвестной ошибкой, которую я получал изначально - person mattgcon; 15.09.2010
comment
Таким образом, изоляция только пользовательского элемента управления на странице aspx не работает. Каким может быть следующий шаг - person mattgcon; 15.09.2010
comment
@mattgcon - см. мою правку. я нашел время и создал веб-приложение, иллюстрирующее, как это сделать (отлично работает), смотрите мои шаги. если это не поможет, к сожалению, я не уверен, что еще может. - person RPM1984; 16.09.2010
comment
RPM2984 - Спасибо за ваше время и усилия. Веб-приложение изначально было веб-сайтом, созданным кем-то, кто не занимался разработкой какого-либо веб-сайта. Я успешно преобразовал множество веб-сайтов в веб-приложения, но этот, эй, я не чудотворец. Я решил отказаться от этих усилий прямо сейчас, так как общий проект отнимал слишком много времени по сравнению с другими проектами, которые у меня были. Я попробовал все ваши предложения, и последнее, что вы сказали в своем редактировании, кажется правдой. Что-то еще не так с веб-приложением где-то еще. Еще раз спасибо. - person mattgcon; 16.09.2010
comment
Никаких проблем, удачи - я уверен, что в конце концов вы разберетесь (это будет что-то простое, как всегда). - person RPM1984; 16.09.2010