Как получить доступ к элементу .Net на главной странице со страницы содержимого? - PullRequest
11 голосов
/ 09 августа 2008

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

У меня есть ListView, в котором перечислены имена людей в области навигации на главной странице. Я хотел бы обновить ListView после добавления человека в таблицу, к которой ListView привязаны данные. ListView в настоящее время не обновляет свои значения, пока кэш не будет перезагружен. Мы обнаружили, что просто повторный запуск ListView.DataBind() обновит содержимое списка. Нам не удалось запустить ListView.DataBind() на странице, которая использует главную страницу.

Ниже приведен пример того, что я хотел сделать, но ошибка компилятора говорит

"PeopleListView не существует в текущем контексте"

GIS.master - Где находится ListView

...<asp:ListView ID="PeopleListView"...

GISInput_People.aspx - использует GIS.master в качестве главной страницы

GISInput_People.aspx.cs

AddNewPerson()
{
    // Add person to table
    ....

    // Update Person List
    PeopleListView.DataBind();
    ...
}

Как лучше всего решить эту проблему в C # .Net?

Ответы [ 6 ]

16 голосов
/ 09 августа 2008

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

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

3 голосов
/ 09 августа 2008

Предполагается, что элемент управления называется "PeopleListView" на главной странице

ListView peopleListView = (ListView)this.Master.FindControl("PeopleListView");
peopleListView.DataSource = [whatever];
peopleListView.DataBind();

Но @ palmsey более правильно, особенно если на вашей странице может быть несколько главных страниц. Разъедините их и используйте событие.

2 голосов
/ 08 июня 2012

Вариант 1: вы можете создать общедоступное свойство элемента управления главной страницы

public TextBox PropMasterTextBox1
{
    get { return txtMasterBox1; }
    set { txtMasterBox1 = value; }
}

доступ к нему на странице содержимого, как

Master.PropMasterTextBox1.Text="SomeString";

Вариант 2: на главной странице:

public string SetMasterTextBox1Text
{  
    get { return txtMasterBox1.Text; }
    set { txtMasterBox1.Text = value; }
}

на странице содержимого:

Master.SetMasterTextBox1Text="someText";

вариант 3: Вы можете создать какой-то публичный метод, который работает для вас


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

1 голос
/ 23 августа 2008

Следует помнить следующую директиву ASP.NET.

<%@ MasterType attribute="value" [attribute="value"...] %>

Ссылка MSDN

Это поможет вам при ссылке на this.Master, создав строго типизированную ссылку на главную страницу. Затем вы можете ссылаться на свой ListView без необходимости CAST.

0 голосов
/ 08 апреля 2011

Вы можете получить доступ с кодом this.Master.FindControl (ControlID), который вы хотите контролировать. Возвращает ссылку на элемент управления, чтобы изменения вступили в силу. Про стрельбу на событии не могло быть возможно в каждой ситуации.

0 голосов
/ 09 августа 2008

Если ваша главная страница была названа MyMaster:

(Master as MyMaster).PeopleListView.DataBind();

Редактировать: , поскольку PeopleListView будет объявлен защищенным по умолчанию, вам необходимо либо изменить его на public, либо создать обертку открытого свойства, чтобы вы могли получить к ней доступ со своей страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...