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

Использовать элемент управления пользователя в той же папке, что и страница

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

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

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

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

Спасибо

4b9b3361

Ответ 1

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

Подробнее см. здесь.

Примечания

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

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

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

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

Ответ 2

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

<%@ Register TagPrefix="MyControlTagPrefix" TagName="MyControlTagName" Src="~/MyFolder/MyControl.ascx" %>

Ответ 3

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

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