Wie zu Zugang .Net element auf der Master-Seite aus einer Content-Seite?

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

  •  08-06-2019
  •  | 
  •  

Frage

Ist es möglich, den Zugriff auf ein element auf einer Master-Seite, von der Seite geladen innerhalb des ContentPlaceHolder für den master?

Ich habe eine ListView, die Listen die Namen von Personen in einen Navigationsbereich auf der Master-Seite.Ich möchte Aktualisierung der ListView nach einer person wurde der Tabelle Hinzugefügt, die das ListView-Steuerelement an Daten gebunden ist.Die ListView derzeit nicht aktualisiert es die Werte, bis der cache neu geladen wird.Wir haben festgestellt, dass nur ein erneutes ausführen des ListView.DataBind() update listview-Inhalt.Haben wir nicht in der Lage zu laufen die ListView.DataBind() auf einer Seite befindet, verwendet die Master-Seite.

Unten ist ein Beispiel, was ich tun wollte aber einen compiler-Fehler, der sagt

"PeopleListView existiert nicht im aktuellen Kontext"

- GIS.Meister -, Wo ListView befindet

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

GISInput_People.aspx - GIS Verwendet.master-wie master-Seite

GISInput_People.aspx.cs

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

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

Was wäre der beste Weg, um ein Problem zu beheben, wie dies in C# .Net?

War es hilfreich?

Lösung

Ich glaube, Sie könnte tun Sie dies durch die Nutzung dieser.Master.FindControl oder etwas ähnliches, aber Sie sollte wohl nicht - es erfordert die Inhalte der Seite zu wissen zu viel über die Struktur des master-Seite.

Ich würde vorschlagen, ein anderes Verfahren, wie das auslösen eines Ereignisses im content-Bereich, der Meister konnte hören und neu zu binden, wenn Sie abgefeuert werden.

Andere Tipps

Vorausgesetzt, die Steuerung wird als "PeopleListView" auf der master-Seite

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

Aber @palmsey ist mehr richtige, vor allem, wenn Ihre Seite hätte die Möglichkeit, mehr als eine master-Seite.Entkoppeln Sie Sie und verwenden Sie eine Veranstaltung.

Option 1 :Sie können erstellen öffentliches Eigentum Ihrer master-Seite kontrollieren

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

Zugriff auf Inhalte der Seite wie

Master.PropMasterTextBox1.Text="SomeString";

Option 2:auf der Master-Seite:

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

auf den Inhalt der Seite:

Master.SetMasterTextBox1Text="someText";

option 3 :können Sie einige öffentliche Methode, die für Sie arbeitet


dieser Ansatz ist nicht so nützlich, aber es hilft, wenn Sie nur wollen, um zu verwenden einige begrenzten und vordefinierten control

Man denke sich zu erinnern, ist die folgende ASP.NET Richtlinie.

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

MSDN-Referenz

Es wird Ihnen helfen, wenn Sie verweisen auf dieses.Master durch das erstellen einer stark typisierten Verweis auf die master-Seite.Anschließend können Sie Ihre Referenz ListView, ohne zu werfen.

Sie können den Zugriff mit der code this.Master.FindControl(ControlID), die Kontrolle, die Sie wünschen.Es gibt den Verweis auf das Steuerelement, damit die änderungen wirksam sind.über das auslösen eines Ereignisses konnte nicht möglich sein, in jeder situation.

Vorausgesetzt, dass Ihr master-Seite hieß MyMaster:

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

Edit: seit PeopleListView erklärt wird, geschützt durch Standard, Sie müssen entweder ändern Sie dies in öffentlichen oder erstellen Sie eine öffentliche Eigenschaft wrapper, so dass Sie können Zugang es von Ihrer Seite.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top