Перемещение пользовательского веб-элемента управления в другое пространство имен - PullRequest
1 голос
/ 11 сентября 2009

Наше веб-приложение имеет элемент управления, который настроен с помощью разметки, кода и файла конструктора, например:

Разметка

<%@ Control Language="VB" AutoEventWireup="false"
    Inherits="NewNameSpace.Controls.generic_selector" Codebehind="generic-selector.ascx.vb" %>

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

Описание: ошибка произошла во время парсинг ресурса, необходимого для обслуживайте этот запрос. Пожалуйста ознакомтесь следующая конкретная ошибка разбора детали и измените ваш исходный файл соответственно.

Сообщение об ошибке парсера: не удалось загрузить тип 'NewNameSpace.Controls.generic_selector'.

Добавление : Я переместил разметку, код и файл конструктора в новое пространство имен. Не похоже, чтобы помочь.

Проект по-прежнему строится правильно. Есть ли что-то еще, что нам нужно сделать?


Обновление

Еще раз взглянем на это на этой неделе, вот мое предположение. При создании элемента управления по умолчанию он переходит к Global.NameOfProject.NameOfControl.

Может быть, новый элемент управления теперь находится в Global.NameOfProject.NewNameSpace.Controls?


Обновление:

Элемент управления, по-видимому, частично входит в пространство имен Global.NameOfProject.NewNameSpace.Controls. Проблема в том, что не ясно, как переместить весь класс в новое пространство имен. Я пробовал различные изменения разметки, и ни одно из них, похоже, не прилипало - кажется, что только пространство имен по умолчанию работает без сбоев.

Таким образом, мой вопрос остается открытым: как переместить пользовательский элемент управления в другое пространство имен?

Ответы [ 2 ]

3 голосов
/ 11 сентября 2009

Вам также нужно изменить пространство имен в классе code-behind.

Откройте файл generic-selector.ascx.vb и убедитесь, что тип generic-selector обернут в пространство имен свойства следующим образом:

Namespace NewNameSpace.Controls
    Class generic-selector

    End Class
End Namspace
2 голосов
/ 04 февраля 2011

У меня такая же проблема, как и у вас. Я включил свой кодовый файл как обычно, однако после прочтения этого блога aspnet-context-is-not-member-user -h.ml и измени мой файл кода через intellisense, и это сработало. Кажется, ему нужен относительный путь

При создании пользовательского элемента управления вы можете столкнуться с ошибкой, в которой говорится, что «Context не является членом ControlName». Есть множество причин, почему это может появиться. Наиболее распространенные, которые я видел:

Отсутствует пространство имен в свойстве Inherits (если вы его не используете, это не относится) Отсутствует CodeFile или неправильный путь CodeFile, вы можете использовать Intellisense для поиска файла, чтобы обеспечить правильный путь

...