Zugriff auf das .Net-Element auf der Masterseite von einer Inhaltsseite aus

  • Kann ein Element auf einer Masterseite von der innerhalb von ContentPlaceHolder geladenen Seite des Masters aufgerufen werden?

    Ich habe eine ListView Hier werden die Namen der Personen in einem Navigationsbereich auf der Masterseite aufgelistet. Ich möchte die ListView aktualisieren, nachdem eine Person zu der Tabelle hinzugefügt wurde, an die die ListView-Daten gebunden sind. Das ListView aktualisiert seine Werte derzeit erst, wenn der Cache neu geladen wird. Wir haben festgestellt, dass durch das erneute Ausführen von ListView.DataBind() der Inhalt der Listenansicht aktualisiert wird. Wir konnten ListView.DataBind() nicht auf einer Seite ausführen, die die Masterseite verwendet.

    Nachfolgend finden Sie ein Beispiel für das, was ich tun wollte, aber ein Compiler-Fehler besagt:

    "PeopleListView funktioniert nicht ist im aktuellen Kontext nicht vorhanden "

    GIS.master - Wo sich ListView befindet

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

    GISInput_People.aspx - Verwendet GIS.master als Masterseite

    GISInput_People.aspx.cs

     AddNewPerson()
    {
        // Add person to table
        ....
    
        // Update Person List
        PeopleListView.DataBind();
        ...
    }
     

    Wie kann ein Problem wie dieses in C # .Net am besten gelöst werden?

    11 February 2016
    HéctorFaheem
4 answers
  • Ich glaube, könnte dies tun, indem Sie this.Master.FindControl oder ähnliches verwenden, aber Sie sollten es wahrscheinlich nicht - es erfordert, dass die Inhaltsseite zu viel über die Struktur von kennt Die Masterseite.

    Ich würde eine andere Methode vorschlagen, z. B. das Auslösen eines Ereignisses im Inhaltsbereich, auf das der Master beim Abhören warten und ihn erneut verbinden kann.

    09 August 2008
    palmsey
  • Option 1: Sie können eine öffentliche Eigenschaft der Masterseite erstellen.

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

    Zugriff darauf auf der Inhaltsseite wie

     Master.PropMasterTextBox1.Text="SomeString";
     

    Option 2: auf der Masterseite:

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

    auf der Inhaltsseite:

     Master.SetMasterTextBox1Text="someText";
     

    Option 3: Sie können eine öffentliche Methode erstellen, die für Sie geeignet ist.


    Dieser Ansatz ist nicht so nützlich Es ist jedoch hilfreich, wenn Sie nur ein begrenztes und vordefiniertes Steuerelement verwenden möchten

    07 February 2016
    Markus SafarMHop
  • Denken Sie an die folgende ASP.NET-Direktive:

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

    MSDN-Referenz

    Es wird beim Verweisen auf this.Master helfen, indem Sie einen stark typisierten Verweis auf die Masterseite erstellen. Sie können dann auf Ihr ListView verweisen, ohne dass Sie CAST verwenden müssen.

    23 August 2008
    Adam Carr
  • können Sie mit dem Code this.Master.FindControl (ControlID) auf das gewünschte Steuerelement zugreifen. Es gibt die Referenz des Steuerelements zurück, damit die Änderungen wirksam werden. Das Abfeuern eines Ereignisses konnte nicht in jeder Situation möglich sein.

    08 April 2011
    icaptan