Ошибка ASP.NET: страница Y.ascx не может использовать пользовательский элемент управления X.ascx - PullRequest
17 голосов
/ 15 августа 2011

При попытке создать проект веб-сайта в Visual Studio 2010 появляется сообщение об ошибке:

Страница '/WebSite/controls/C2.ascx' не может использовать пользовательский элемент управления '/WebSite/controls/C1.ascx', поскольку она зарегистрирована в web.config и находится в том же каталоге, что и стр.

У меня есть 2 элемента управления в Интернете:

controls/C1.ascx
controls/C2.ascx

Элементы управления были зарегистрированы в web.config:

<configuration>
    <system.web>
        <pages>
            <controls>
                <add src="~/controls/C1.ascx" tagPrefix="my" tagName="C1"/>
                <add src="~/controls/C2.ascx" tagPrefix="my" tagName="C2"/>
            </controls>
        </pages>
    </system.web>
</configuration>

C1.ascx содержит только статический HTML, C2.ascx пытается включить C1:

C1.ascx содержит простой статический простой HTML. C2.ascx пытается включить C1.ascx:

<%@ Control Language="VB" %>
<my:C1 runat="server" />
<p>Hello from C2</p>

При попытке построить проект я получаю сообщение об ошибке вверху. Я понимаю, что эту проблему можно исправить, добавив еще одну директиву Register в C2.ascx ...:

<%@ Register Src="~/controls/C1.ascx" TagPrefix="ctl" TagName="C1" %>

... но мне интересно, есть ли более чистое решение и почему я вообще получаю ошибку?

Ответы [ 2 ]

25 голосов
/ 15 августа 2011

Ваши единственно возможные решения:

  • Переместить элемент управления из каталога, который в данный момент используется совместно с external.ascx, или
  • Перерегистрируйте элемент управления в external.ascx, как вы уже упоминали
  • Переписать их в коде как элементы управления в отдельной библиотеке

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

5 голосов
/ 15 августа 2011

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

Кстати: это поведение специально, как вы можете прочитать на этой странице MSDN (ищите желтую заметку почти наконец страницы).

...