Como acessar .Net elemento na página Principal de uma página de Conteúdo?

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

  •  08-06-2019
  •  | 
  •  

Pergunta

É possível acessar um elemento em uma página Mestra a partir da página carregada dentro do ContentPlaceHolder para o mestre?

Eu tenho um ListView com listas de nomes de pessoas em uma área de navegação na página Principal.Eu gostaria de atualizar o ListView depois que uma pessoa foi adicionado à tabela que o ListView é dependente de dados para.O ListView atualmente não actualização dos valores até que o cache é recarregado.Descobrimos que apenas re-executar o ListView.DataBind() irá atualizar um listview do conteúdo.Não temos sido capazes de executar o ListView.DataBind() em uma página que usa a página Principal.

Abaixo está um exemplo do que eu queria fazer, mas um erro do compilador diz

"PeopleListView não existe no actual contexto"

GIS.mestre - Onde reside ListView

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

GISInput_People.aspx - Usa sistemas de informação geográfica.mestre, como é página principal

GISInput_People.aspx.cs

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

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

Qual seria a melhor maneira de resolver um problema como este em C# .Net?

Foi útil?

Solução

Eu acredito em você poderia fazer isso usando este.O mestre.FindControl ou algo semelhante, mas você provavelmente não deve - requer o conteúdo da página, para saber muito sobre a estrutura da página-mestre.

Gostaria de sugerir outro método, como o disparo de um evento na área de conteúdo que o mestre pudesse ouvir e re-bind quando acionado.

Outras dicas

Assumindo o controle é chamado de "PeopleListView" na página mestre

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

Mas @palmsey é mais correto, especialmente se a sua página pode ter a possibilidade de mais de uma página principal.Dissociar-los e usar um evento.

Opção 1 :você pode criar a propriedade pública da sua página mestra de controle

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

acessá-lo na página de conteúdo, como

Master.PropMasterTextBox1.Text="SomeString";

Opção 2:na página Principal:

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

na Página de Conteúdo:

Master.SetMasterTextBox1Text="someText";

opção 3 :você pode criar algum método público que funciona para você


estes abordagem não é tão útil, mas ajuda se você quer apenas usar alguns limitado e pré-definido de controle

Pensar a lembrar é o seguinte ASP.NET directiva.

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

Referência MSDN

Ele vai ajudar você ao fazer referência a este.Mestre pela criação de uma rigidez de referência para a página principal.Você pode, em seguida, fazer referência a sua ListView sem a necessidade de LANÇAR.

você pode acessar com o código de presente.O mestre.FindControl(ControlID) o controle que você deseja.Ele retorna a referência do controle, de modo que as alterações são efetivas.sobre disparando um evento pode não ser possível em cada situação.

Assumindo que o seu mestre página foi nomeado MyMaster:

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

Editar: desde PeopleListView será declarada protegida por padrão, será necessário alterar este público, ou criar uma propriedade pública wrapper para que você pode acessá-lo a partir de sua página.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top