Cum să accesați elementul .Net pe pagina Master dintr-o pagină de conținut?

Este posibil să accesați un element dintr-o pagină Master din pagina încărcată în ContentPlaceHolder pentru master?

Am un ListView care afișează numele oamenilor într-o zonă de navigare pe pagina Master. Aș dori să actualizez ListView după ce o persoană a fost adăugată la tabelul la care este listat ListView. ListView nu actualizează în prezent valorile lui până când cache-ul nu este reîncărcat. Am constatat că doar re-rulează ListView.DataBind() va actualiza conținutul unui listview. Nu am putut rula ListView.DataBind() pe o pagină care utilizează pagina Master.

Mai jos este o mostră a ceea ce am vrut să fac, dar o eroare de compilator spune

"PeopleListView nu există în contextul actual"

GIS.master - unde locuiește ListView

...

GISInput_People.aspx - Utilizează GIS.master ca pagină principală

GISInput_People.aspx.cs

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

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

Care ar fi cel mai bun mod de a rezolva o problemă ca asta în C# .Net?

0
fr hi bn

6 răspunsuri

Presupunând că pagina principală a fost numită MyMaster:

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

Edit: since PeopleListView will be declared protected by default, you will either need to change this to public, or create a public property wrapper so that you can access it from your page.

0
adăugat

Presupunând că controlul se numește "PeopleListView" pe pagina principală

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

Dar @ palmsey este mai corectă, mai ales dacă pagina dvs. ar putea avea mai multe pagini de bază. Deconectați-le și folosiți un eveniment.

0
adăugat

Cred că ați putea face acest lucru folosind acest.Master.FindControl sau ceva asemănător, dar probabil că nu ar trebui să - necesită pagina de conținut să știe prea multe despre structura paginii principale.

Aș sugera o altă metodă, cum ar fi arderea unui eveniment în zona de conținut pe care maestrul ar putea să o asculte și să se reînscrie când a fost concediat.

0
adăugat

puteți accesa codul this.Master.FindControl (ControlID) pe care îl doriți. Aceasta returnează referința controlului, astfel încât modificările să fie eficiente. despre declanșarea unui eveniment nu ar fi posibilă fiecare situație.

0
adăugat

Una dintre ideile pe care le-am amintit este următoarea directivă ASP.NET.

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

Referință MSDN

Acesta vă va ajuta atunci când se referă la acest lucru. Maestru prin crearea unei trimiteri puternic introduse pe pagina principală. Puteți apoi să vă referiți la lista dvs. de vizualizare fără a fi nevoie să CAST.

0
adăugat

Opțiunea 1: puteți crea proprietatea publică a controlului paginii principale

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

accesați-l pe pagina de conținut cum ar fi

Master.PropMasterTextBox1.Text="SomeString";

Opțiunea 2: pe pagina Master:

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

pe pagina de conținut:

Master.SetMasterTextBox1Text="someText";

opțiunea 3: puteți crea o metodă publică care funcționează pentru dvs.


această abordare nu este atât de utilă, dar vă ajută dacă doriți doar să utilizați un control limitat și predefinit

0
adăugat
Mulțumesc, acest lucru funcționează. Cu toate acestea, trebuie să-l arunce: ((myMasterPage) master) .SetMasterTextBox1Text = "someText";
adăugat autor Serguei Fedorov, sursa
Aceasta este metoda pe care am folosit-o, fără modificarea suplimentară a lui Serguei. Funcționează foarte bine făcând exact ceea ce am nevoie. Probabil ar fi trebuit să fie marcat și ca răspuns. +1
adăugat autor James, sursa
depinde de implementarea dvs. ... pentru o pagină principală unică nu necesită acest lucru. iar implementarea dvs. reală ar fi mult mai complexă decât un exemplu de bază (cum ar fi Print "Hello World!")
adăugat autor BrainCoder, sursa