Подтвердить что ты не робот

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

Я получаю ошибку ниже при попытке создания проекта веб-сайта в Visual Studio 2010:

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

У меня есть два пользовательских веб-элемента управления:

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" %>

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

Спасибо!

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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