Ошибка 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" %>
... но мне интересно, есть ли более чистые решения и почему я получаю ошибку в первую очередь?
Спасибо!
Ответы
Ответ 1
Ваши единственные возможные решения:
- Переместите элемент управления из каталога, который в настоящее время используется совместно с внешним .ascx, или
- Перерегистрируйте элемент управления внутри внешнего .ascx, как вы уже упоминали
- Перезапишите их в коде как элементы управления в отдельной библиотеке
Я лично считаю, что перемещение является самым легким, если оно будет работать на ваши решения. Во-вторых, перерегистрация, хотя и раздражающая. Абстрагирование их в полную библиотеку кода, вероятно, не стоит усилий, если это единственная причина, по которой вы это делаете.
Ответ 2
Вы также можете поместить элементы управления в разные папки. Но я не думаю, что это намного чище или лучше.
BTW: это поведение по дизайну, так как вы можете читать на этой странице MSDN (ищите желтую ноту почти в конце страница).