Ответ 1
Я нашел решение, которое работает. Я не буду использовать свойство autogenerated в файле designer. Я напишу свое собственное свойство оболочки, которое я реализую на каждой контентной странице.
после нескольких недель после этой проблемы я, наконец, решил обратиться за решением следующей проблемы:
На странице .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.
Я нашел решение, которое работает. Я не буду использовать свойство autogenerated в файле designer. Я напишу свое собственное свойство оболочки, которое я реализую на каждой контентной странице.
По какой-то причине дизайнер считает, что главная страница определена в пространстве имен NAMESPACE1
, поэтому посмотрите на определение главной страницы (и код позади), чтобы проверить, что его пространство имен не было изменено (возможно, случайно).
Если нет ничего очевидного, может потребоваться поиск во всех файлах (*.cs, *.aspx, *.master,...) для NAMESPACE1
.
(Здесь использование VCS поможет --- вы можете проверить историю изменений.)
На самом деле это скорее дизайнерская функция.; -)
Имя мастера, используемое в вашем файле дизайнера, будет вытащено из вашего .Master файла. Наследует свойство. Поэтому измените способ присвоения атрибуту Inherits и измените имя класса, используемое при создании файла конструктора.
У меня была такая же проблема, когда я добавил <%@ MasterType VirtualPath="~/TestMaster.Master" %>
на мою страницу aspx в представлении SOURCE. По какой-то причине страница никогда не создавалась правильно и продолжала давать мне недопустимые ошибки пространства имен, пока я фактически не изменил представление DESIGN и не изменил размер элемента управления, и, наконец, ошибка исчезла. Где-то он использовал некоторые кэшированные данные (даже Build/Clean Solution не очистил его), и пока дизайнер не воссоздает страницу, он генерирует эту ошибку.
Измените
<%@ MasterType VirtualPath="~/Mastername.master" %>
to
<%@ MasterType TypeName="Mastername" %>
это будет отлично работать