Как получить доступ к элементу .NET на странице Master от страницы Content?

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

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

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

"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();
    ...
}

Каков был бы лучший способ решить вопрос как это в .NET C#?

14
задан Héctor 11 February 2016 в 09:54
поделиться

4 ответа

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

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

17
ответ дан 1 December 2019 в 12:40
поделиться

Каждый думает для запоминания, следующая директива ASP.NET.

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

Ссылка MSDN

Это поможет Вам при ссылке на это. Ведущее устройство путем создания ссылки со строгим контролем типов на основную страницу. Можно тогда сослаться ListView, не будучи должен БРОСИТЬ.

1
ответ дан 1 December 2019 в 12:40
поделиться

Брать на себя управление называют "PeopleListView" на основной странице

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

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

3
ответ дан 1 December 2019 в 12:40
поделиться

Принятие Вашей основной страницы назвали MyMaster:

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

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

-1
ответ дан 1 December 2019 в 12:40
поделиться