Предположительно проверенная методика превращения пользовательских элементов управления веб-сайта в серверные элементы управления многократного использования при сохранении возможности использовать декларативный код дает мне NullReferenceException
для любой ссылки на любой элемент управления, объявленный внутри кода ASCX.
При вызове ASCX из того же проекта эта проблема не возникает.
Идея заключается в том, что по требованию выполняется компиляция декларативного кода элементов управления (предварительно скомпилированный веб-сайт). После применения aspnet_merge, неуклюже названные сборки получают нормальные имена, однако, если этот первый шаг не работает ... То, что я сделал, вкратце:
- Создайте веб-сайт, добавьте пользовательский контроль, добавьте литерал и установите его текст в коде. Проверьте это.
- Компилировать в фиксированную именованную сборку без возможности обновления
- Возьмите выходную DLL, добавьте их в другой веб-проект и протестируйте их.
Последний шаг дает мне исключение нулевой ссылки в ту минуту, когда я пытаюсь получить доступ к любому свойству декларативно инициализированного элемента управления изнутри этого элемента управления (т. Е. В Page_Load в моем случае).
PS: Скотт Гатри объясняет ту же технику здесь .