2009-04-26 3 views
0

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

Обновление: Благодарим вас за быстрые решения, однако они не работают для меня. Visual Studio не распознает имя страницы как класс. Я взял имя от того, где класс оп ределяется:

public partial class Apps_Site_Templates_CollegesMain : cUICommonFeatures 

(cUICommonFeatures наследует от System.Web.UI.Page)

Но в контроле, когда я определяю

 protected System.Web.UI.Page parentPage; 
     parentPage = (Apps_Site_Templates_CollegesMain)Page; 

I получить сообщение об ошибке:

Не удалось найти имя типа или пространства имен 'Apps_Site_Templates_CollegesMain' (вам не хватает директивы using или ссылки на сборку?)

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

ответ

1

Элементы управления должны быть написаны независимо от того, на какой странице они находятся. Если элементу управления требуется часть данных, он должен выставить публичное свойство, которое относится к типу данных, которые ему нужны. Страница, находящаяся на wo uld, затем устанавливает это свойство в данные, которые требуется элементу управления. Это позволяет использовать элемент управления на другой странице или даже составлять часть UserControl и затем использовать UserControl на родительской странице.

2

Если класс родительской страницы называется позволяет говорить ParentPage, вы можете сделать это в рамках контроля:

ParentPage page = (ParentPage)this.Page; 

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

IParentPage page = (IParentPage)this.Page; 

Ответил ли это на ваш вопрос?

+0

Моя проблема заключается в том, что Visual Studio не распознает имя родительской страницы как класс ... Я обновил свой вопрос –

+0

+1 - интерфейсы - определенно путь сюда. –

+0

@Lea Cohen: У вас есть «using namespace.where.page.class.reside» в верхней части вашего файла usercontrol? Если вы это сделаете, какие пространства имен - это страница и пользовательский контроль, соответственно? – asgerhallas

1

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

Также вы можете получить доступ к странице из вашего контроля, как что:

string dataYouWant = ((YourParentPageName)Page).GetData(); 

Или вы можете добавить данные в ViewState, и читать его из дочерних элементов управления.

Но, как я уже сказал, я бы выбрал первый.

1

Все элементы управления (элементы управления сервером, пользовательские элементы управления и пользовательские элементы управления) выставляют свойство Page, которое позволяет вам получить доступ к содержащему экземпляру страницы из кода элемента управления.

Таким образом, вы можете просто сделать:

// In Usercontrol code: 
MyParentPage parentPage = this.Page as MyParentPage; 
if (parentPage != null) 
{ 
    // Access the properties of the Parent page. 
    string t = parentPage.Title; 
} 

В статье «Mastering Page-UserControl Communication» предлагает хорошее введение начинающих контролировать-страницу взаимодействий.

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