Использовать пользовательский контроль в той же папке, что и страница - PullRequest
20 голосов
/ 03 июня 2010

Я получаю это сообщение во время выполнения страницы ASP.NET 2:

Страница «MyFolder / blabla.aspx» не может использовать пользовательский элемент управления «MyFolder / MyControl.ascx», поскольку она зарегистрирована в web.config и находится в том же каталоге, что и страница.

Конечно, я могу разделить их на 2 разные папки и таким образом решить проблему, но вопрос:

WTF!?!?! Почему я не могу положить их в одну папку ?! Почему они не могут все .. ладить!?! :)

Спасибо

Ответы [ 3 ]

12 голосов
/ 03 июня 2010

Это ограничение является конструктивным из-за внутреннего соображения дизайна: производительность.

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

Примечания

Класс TagPrefixInfo позволяет программно получать доступ и изменить информацию префикса тега, сохраненную в файле конфигурации. Это обеспечивает ту же функциональность, что и ASP.NET @ Register директивы. Префиксы тегов связывают «пространство имен» в ASP.NET с сборки и пространства имен, которые должны быть включены для пользовательских элементов управления и пользовательские элементы управления для правильной работы. TagPrefixInfo объекты хранятся как члены TagPrefixCollection объекта. TagPrefixCollection класс позволяет программно получать доступ и измените подраздел control раздела pages файл конфигурации.

Объекты TagPrefixInfo добавляются в коллекцию с помощью add элемент и указав значение для атрибута tagPrefix вместе со значениями для других соответствующих атрибутов. Другой требуется информация варьируется в зависимости от вида контроля, который вы будете использовать с указанный префикс тега:

  • Если это пользовательский элемент управления, вы должны определить свойства TagPrefix , TagName и Source .
  • Если это пользовательский элемент управления, вы должны определить свойства TagPrefix , Пространство имен и Assembly . Сборка свойство не требуется, если элемент управления находится в коде приложения каталог. Одно и то же значение tagPrefix можно использовать для сопоставления с несколькими сборки или пространства имен.

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

6 голосов
/ 16 ноября 2013

Если вы зарегистрируете его на странице или в пользовательском элементе управления вместо web.config, он загрузится правильно. Добавьте следующее в начало страницы.

<%@ Register TagPrefix="MyControlTagPrefix" TagName="MyControlTagName" Src="~/MyFolder/MyControl.ascx" %>
2 голосов
/ 03 июня 2010

Я подозреваю, что вы могли бы сделать это без регистрации, если это было необходимо. Вы могли бы иметь PlaceHolder и затем использовать .Controls.Add (LoadControl ("path.ascx"))

Но если это не существенно, поместите его в другой каталог по причинам, указанным @Barry.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...