Come accedere .Elemento della rete sulla pagina Master da una pagina di Contenuto?

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

  •  08-06-2019
  •  | 
  •  

Domanda

È possibile accedere a un elemento di una pagina Master pagina caricata all'interno del ContentPlaceHolder per il master?

Ho una ListView che elenca i nomi delle persone in un'area di navigazione sulla pagina Master.Vorrei aggiornare la ListView dopo che una persona è stata aggiunta la tabella che la ListView è associato al.Il ListView attualmente non aggiornare i valori fino a quando la cache è ricaricato.Abbiamo trovato che appena ri-esecuzione del ListView.DataBind() in grado di aggiornare una listview contenuti.Non siamo stati in grado di eseguire il ListView.DataBind() in una pagina che utilizza la pagina Master.

Di seguito è riportato un esempio di quello che volevo fare, ma un errore del compilatore dice

"PeopleListView non esiste nel contesto corrente"

GIS.master - Dove risiede ListView

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

GISInput_People.aspx - Utilizza GIS.master master pagina

GISInput_People.aspx.cs

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

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

Quale sarebbe il modo migliore per risolvere un problema come questo in C# .Net?

È stato utile?

Soluzione

Io credo di si potrebbe farlo utilizzando questo.Master.FindControl o qualcosa di simile, ma probabilmente non dovrebbe - si richiede che il contenuto della pagina per sapere troppo sulla struttura della pagina master.

Vorrei suggerire un altro metodo, ad esempio la generazione di un evento nell'area del contenuto che il maestro poteva ascoltare e ri-associare in fase di cottura.

Altri suggerimenti

Assumendo il controllo è chiamato "PeopleListView" nella pagina principale

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

Ma @palmsey è più corretto, soprattutto se la tua pagina potrebbe avere la possibilità di più di una pagina master.Dissociarli e l'uso di un evento.

Opzione 1 :si può creare la struttura di una pagina master controllo

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

l'accesso è sulla pagina di contenuto come

Master.PropMasterTextBox1.Text="SomeString";

Opzione 2:sulla pagina principale:

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

sul Contenuto della Pagina:

Master.SetMasterTextBox1Text="someText";

opzione 3 :è possibile creare qualche metodo che funziona per voi


questi approccio non è così utile, ma aiuta se si desidera utilizzare alcuni limitati e predefiniti di controllo

Pensare da ricordare è il seguente ASP.NET direttiva.

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

Riferimento MSDN

Essa vi aiuterà quando si fa riferimento a questo.Master creazione di un riferimento fortemente tipizzato alla pagina master.È quindi possibile fare riferimento ListView senza bisogno di CAST.

è possibile accedere con il codice di questo.Master.FindControl(ControlID) che il controllo che si desidera.Restituisce il riferimento del controllo, in modo che le modifiche sono efficaci.sull'attivazione di un evento potrebbe non essere possibile in ogni situazione.

Supponendo che la pagina principale è stato nominato MyMaster:

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

Edit: dal PeopleListView sarà dichiarata protetta per impostazione predefinita, ci sarà bisogno di cambiare questo al pubblico, o creare una proprietà pubblica wrapper in modo che è possibile accedere dalla pagina.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top