Как исправить проблему пространства имен с автогенерированным основным свойством, если установлен MasterType

после нескольких недель после этой проблемы я, наконец, решил обратиться за решением следующей проблемы:

На странице .aspx вы можете установить

<%@ MasterType VirtualPath="~/Mastername.master" %>

Это приводит к автогенерируемому свойству в .aspx.designer

public new Mastername Master {
    get {
        return ((Masternamee)(base.Master));
    }
}

Работает отлично. Но если я вношу изменения в файл .aspx, свойство будет автоматически генерироваться автоматически и выглядит следующим образом:

public new NAMESPACE1.Mastername Master {
            get {
                return ((NAMESPACE1.Mastername)(base.Master));
            }
        }

Компиляция позже не будет возможной, поскольку класс для MasterPage не может быть разрешен в данном пространстве имен. На главной странице NAMESPACE1 есть пространство имен.

Каждая контентная страница имеет тот же NAMESPACE1. Автогенерированное свойство пытается найти класс masterpage в NAMESPACE1.NAMESPACE1, который не удастся, из-за этого его не существует. Конечно, я могу удалить первый NAMESPACE1. чтобы сделать приложение компилируемым снова, но это просто отстой, чтобы сделать это почти каждый раз, когда я вношу изменения в файл .aspx.

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

Изменить: я использую Visual Studio 2008 Professional SP1.

Ответы

Ответ 1

Я нашел решение, которое работает. Я не буду использовать свойство autogenerated в файле designer. Я напишу свое собственное свойство оболочки, которое я реализую на каждой контентной странице.

Ответ 2

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

Если нет ничего очевидного, может потребоваться поиск во всех файлах (*.cs, *.aspx, *.master,...) для NAMESPACE1.

(Здесь использование VCS поможет --- вы можете проверить историю изменений.)

Ответ 3

На самом деле это скорее дизайнерская функция.; -)

Имя мастера, используемое в вашем файле дизайнера, будет вытащено из вашего .Master файла. Наследует свойство. Поэтому измените способ присвоения атрибуту Inherits и измените имя класса, используемое при создании файла конструктора.

Ответ 4

У меня была такая же проблема, когда я добавил <%@ MasterType VirtualPath="~/TestMaster.Master" %> на мою страницу aspx в представлении SOURCE. По какой-то причине страница никогда не создавалась правильно и продолжала давать мне недопустимые ошибки пространства имен, пока я фактически не изменил представление DESIGN и не изменил размер элемента управления, и, наконец, ошибка исчезла. Где-то он использовал некоторые кэшированные данные (даже Build/Clean Solution не очистил его), и пока дизайнер не воссоздает страницу, он генерирует эту ошибку.

Ответ 5

Измените

<%@ MasterType VirtualPath="~/Mastername.master" %>

to

<%@ MasterType TypeName="Mastername" %>

это будет отлично работать