Как добавить UserControl к другому в библиотеке C # ?? (Исключение: не удалось разрешить тип ...) - PullRequest
1 голос
/ 25 января 2010

У меня есть библиотека C #, которая создается и помещается в папку bin моего сайта. В моей библиотеке C # у меня есть файл .ascx, и я пытаюсь добавить туда другой элемент управления .ascx. Но я получаю эту ошибку:

Не удалось разрешить тип для тега "Фб: FormBuilder". Убедитесь в правильности пространство имен зарегистрировано.

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

<%@ Control Language="C#" Inherits="System.Web.UI.UserControl, ITextControl" %>

В родительском контроле у ​​меня есть это:

<%@ Control Language="C#" %>
<%@ Register TagPrefix="fb" TagName="FormBuilder" Src="~/Resources/ControlTemplates/Backend/FormBuilder.ascx" %>
....
<fb:FormBuilder runat="server" id="FormCode"></fb:FormBuilder>

Все мои файлы установлены в качестве параметра сборки как «Встроенный ресурс» (.NET 3.5). Есть идеи, как решить эту проблему?

Ответы [ 2 ]

1 голос
/ 25 января 2010

Декларативный синтаксис выполнения этого в самом файле ascx предполагает наличие файла в месте, указанном в объявлении реестра. Если этот файл не существует, то компилятор не знает, как разрешить ссылку.

Как правило, если вы создаете элементы управления, предназначенные для повторного использования в других веб-приложениях, их следует создавать как пользовательские элементы управления сервером; не как пользовательский контроль. Инфраструктура управления сервером и базовые классы предназначены для повторного использования и упаковки. Создание серверных элементов управления сначала занимает немного больше времени и усилий, но не так много, и после того, как вы сделаете это один или два раза, это станет довольно просто.

Единственное другое решение, которое я могу придумать, - убедиться, что ваша сборка / компиляция сбрасывает фактические файлы ascx в фиксированное место в потребляющем веб-проекте. Таким образом, ваши потребляющие страницы будут иметь правильный путь для использования в директиве register, и файл может быть найден компилятором. Вы можете использовать программный код для динамической загрузки элементов управления, используя Page.LoadControl (). Файл ascx все еще должен существовать физически, но использование выделенного кода для добавления элемента управления на страницу позволяет добавить некоторый интеллект к процессу, читая путь из конфигурации и т.п.

0 голосов
/ 25 января 2010

Это может помочь:

http://west -wind.com / блог / сообщений / 3016.aspx

В любом случае ссылки на одну библиотеку из другой - это та разновидность взаимозависимости, которую я обычно стараюсь избегать.

...