Как получить доступ к элементу .Net на главной странице со страницы контента?

StackOverflow https://stackoverflow.com/questions/6406

  •  08-06-2019
  •  | 
  •  

Вопрос

Можно ли получить доступ к элементу на главной странице со страницы, загруженной в 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?

Это было полезно?

Решение

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

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

Другие советы

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

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

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

Вариант 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:вы можете создать какой-нибудь общедоступный метод, который подойдет вам


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

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

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

Справочник MSDN

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

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

Предполагая, что ваша главная страница называется MyMaster:

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top