2009-12-06 3 views
0

Я создал новый проект веб-сайта. Некоторые вспомогательные классы находятся в папке App_Code. Страницы находятся в корне. Элементы управления пользователя находятся в папке UserControls в корневом каталоге. Весь класс страницы определяется в пространстве имен MyProjectName.Pages. Все классы управления пользователями определены в пространстве имен MyProjectName.UserControls.Не удается получить доступ к классу страниц из-под контроля

Я могу получить доступ с моих страниц к элементам управления, но я не могу получить доступ из своих элементов управления к классам страниц! Я использую свойство страницы и пытаюсь применить его к классу MyPage (включите директиву с использованием MyProjectName.Pages в начале). Здесь компилятор говорит, что это не тип или пространство имен в пространстве имен MyProjectName. Кроме того, я не вижу эти пространства имен (MyProjectName.Pages и MyProjectName.UserControls) в Object Viewer. Должен ли я заменить где-нибудь мои элементы управления и страницы, чтобы получить возможность использовать классы страниц из элементов управления?

+0

И как я мог увидеть все пространства имен моего проекта веб-сайта? – Sevina

ответ

1

Лучше всего перейти на веб-проект с веб-сайта.

Веб-проект «Проект» - это приемный ребенок Microsoft, представленный в ASP.NET 2.0, с возможностью динамического компиляции страниц ПОСЛЕ развертывания сайта. Поэтому компилятор должен быть готов к ситуации, когда страницы будут изменены (включая введение и/или удаление пространств имен) после его создания. Решение Microsoft для этой проблемы состояло в том, чтобы сделать классы в app_Code несколько отдельными от страниц - они скомпилированы в отдельные проходы.

Первоначально это была единственная модель для веб-приложений в ASP.NET 2.0, но она представила так много проблем (ваш только один из них), что MS повторно представила модель из ASP.NET 1.1, которая теперь известна как веб-проекты. Эта модель не имеет каких-либо из этих ограничений, но развертывание apsx динамически сложнее.

Суть в том, что, если вы действительно не нуждаетесь в возможности заменить aspx на лету, вам лучше работать с веб-проектом. И если вам это нужно, вам нужно более внимательно рассмотреть дизайн вашего веб-сайта.

+0

Спасибо за подробное объяснение! Не могли бы вы сказать мне, что мне делать, чтобы переключиться на веб-проект? И мне нужно изменить некоторые настройки или настройки IIS в web.config? – Sevina

+1

Это ссылка, которую я нашел в MSDN: http://msdn.microsoft.com/en-us/library/aa983476%28VS.80%29.aspx – mfeingold

0

Причина вашей проблемы связана с тем, как создаются проекты веб-сайтов. Поскольку они предназначены для создания на лету IIS, они не упаковывают каждый файл в проект в одну DLL; поддерживаемые связи ограничены. Общий код должен быть в App_Code, а не в ваших классах страниц.

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

+0

Я переехал! Большое спасибо! .. Но не следует контролировать использование некоторых свойств, с общими для нескольких элементов управления и страниц - таких как UserID - которые извлекаются из идентификатора пользователя Cookie - это определение на pge и использование в некоторых элементах управления, поэтому они должны cast page class – Sevina

+0

Тем не менее идея создания таких свойств на самой странице не является идеей бога. Этот подход является хрупким и легко ломается. Есть более эффективные способы - т. Е. Вы можете получить свой собственный класс страницы из Web.Page и определить такие свойства там. Ваши страницы могут быть получены из класса вашей страницы. – mfeingold

+0

@Sevina: вы можете передавать данные со своей страницы на свои элементы управления, используя свойства элементов управления. Это намного лучше, чем пытаться заставить элемент управления вернуться на страницу каким-то образом. Другая возможность - установить параметры в кеше для каждого запроса в HttpContext.Items [] или использовать функции с областью уровня проекта, а не помещать эти функции на свои страницы. – RickNZ

Смежные вопросы