Получение имени пространства имен не найдено для пользовательского элемента управления ASP.net - PullRequest
3 голосов
/ 05 мая 2009

Так что у меня возникают проблемы при попытке опубликовать сайт. Я в Visual Studio 2008 SP1.

У меня есть куча пользовательских элементов управления, и на нескольких страницах я использую их программно.

У меня есть ссылка на странице aspx

<%@ Reference Control="~/UserControls/Foo.ascx" %>

Тогда на коде бэхинга я использую

ASP.usercontrols_foo newFoo control = (ASP.usercontrols_foo)Page.LoadControl("~/UserControls/Foo.ascx");

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

Ответы [ 8 ]

6 голосов
/ 24 августа 2009

Argh, я истекаю часами разработки по этой же проблеме. У кого-нибудь есть решение этой проблемы?

Кстати: он создается, если вы снимите флажок «Разрешить возможность обновления этого предварительно скомпилированного сайта» (щелкните правой кнопкой мыши веб-сайт, выберите «Страницы свойств», параметр MSBuild)

Но мне нужно, чтобы сайт обновлялся.

2 голосов
/ 11 ноября 2009

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

Попробуйте заменить код следующим образом:

ASP.usercontrols_foo newFoo control = (ASP.usercontrols_foo)Page.LoadControl("~/UserControls/Foo.ascx");

с

USERCONTROLS_Foo newFoo control = (USERCONTROLS_Foo)Page.LoadControl("~/UserControls/Foo.ascx");

(Использование заглавных букв будет основано на том, как вы прописали имя каталога / имя элемента управления, но в любом случае должно выделяться соответствующим образом).

1 голос
/ 16 июля 2010

Я нашел решение для этого. Если я объявлю элементы управления в определяемом пользователем пространстве имен, то я могу использовать элементы управления напрямую, без использования ASP или ссылки на страницу aspx.

1 голос
/ 23 апреля 2010

Укажите пространство имен для пользовательского элемента управления (см. Динамическая загрузка пользовательского элемента управления (ascx) на веб-сайте asp.net ).

0 голосов
/ 20 апреля 2016

Пожалуйста, проверьте:

Есть ли у вас файл website.publishproj?
Если он существует, удалите и попробуйте снова и опубликуйте код.

0 голосов
/ 14 июля 2010

Приведение пользовательского элемента управления может создать много проблем. Мой подход заключается в создании класса (скажем, класса элемента управления), поместите все необходимые свойства и метод после приведения и наследуйте этот класс от System.Web.UI.UserControl. Затем в вашем Пользовательский кодовый файл cotrol вместо System.Web.UI.UserControl user этого класса управления.

теперь, когда вам когда-либо понадобится кастование только с этим классом. это будет легкая отливка.

0 голосов
/ 24 августа 2009

Да, я могу привести его к контролю. Но тогда я теряю прямой доступ к методам в usercontrol.

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

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

<%@ Register src="CategoryRows.ascx" tagname="CategoryRows" tagprefix="abc" %>
<abc:CategoryRows ID="CategoryRows" runat="server" />

Обратите внимание, что я могу успешно запустить сайт как локально, так и на сервере, если я по сути XCopy весь сайт (исходный код и все). Но опубликовать не удается.

0 голосов
/ 24 августа 2009

Возможно, это связано с отсутствием определенного типа. Можете ли вы изменить ссылку на элемент управления, чтобы тип и приведение типов просто использовали базовый класс Control:

Control control = Page.LoadControl("~/UserControls/Foo.ascx");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...