Vraag hoe toegang te krijgen tot basisbesturingselement vanaf de inhoudspagina


Ik heb een hoofdpagina met een label voor statusberichten. Ik moet de statustekst instellen op verschillende .aspx-pagina's. Hoe kan dit worden gedaan vanaf de inhoudspagina?

public partial class Site : System.Web.UI.MasterPage
{
    public string StatusNachricht
    {
        get
        {
            return lblStatus.Text;
        }
        set
        {
            lblStatus.Text = value;
        }
    }

    protected void Page_Load(object sender, EventArgs e)
    {            

    }
}

Ik heb dit geprobeerd, maar was niet succesvol in het laten werken:

public partial class DatenAendern : System.Web.UI.Page
{
    var master = Master as Site;

    protected void Page_Load(object sender, EventArgs e)
    {               
        if (master != null)
        {
            master.setStatusLabel("");
        }
    }        

    protected void grdBenutzer_RowCommand(object sender, GridViewCommandEventArgs e)
    {           
            try
            {
                //some code

                if (master != null)
                {
                    master.setStatusLabel("Passwort erfolgreich geändert.");
                }
            }
            catch (Exception ex)
            {
                if (master != null)
                {
                    master.setStatusLabel("Passwort konnte nicht geändert werden!");
                }                                       
            }
        }
    }                   
}

38
2018-03-22 14:59


oorsprong


antwoorden:


Voeg in het bestand MasterPage.cs de property van Label soortgelijk:

public string ErrorMessage
{
    get
    {
        return lblMessage.Text;
    }
    set
    {
        lblMessage.Text = value;
    }
}

Op je aspx pagina, net onder de paginarichtlijn, voeg dit toe:

<%@ Page Title="" Language="C#" MasterPageFile="Master Path Name"..... %>
<%@ MasterType VirtualPath="Master Path Name" %>   // Add this

En in jouw codebehind(aspx.cs) pagina die u dan gemakkelijk kunt openen Label Property en stel zijn text zoals gevraagd. Soortgelijk:

this.Master.ErrorMessage = "Your Error Message here";

65
2018-03-22 15:08



Op de inhoudspagina kunt u het label openen en de tekst instellen zoals

Hier is 'lblStatus' de ID van je masterpaginagelabel

Label lblMasterStatus = (Label) Master.FindControl ("lblStatus");

lblMasterStatus.Text = "Meaasage from content page";

25
2018-04-05 06:37



Het werkt

Om de besturingselementen van de stramienpagina op de pagina Kind te vinden

Label lbl_UserName = this.Master.FindControl("lbl_UserName") as Label;                    
lbl_UserName.Text = txtUsr.Text;

7
2017-10-31 09:53



U kan niet gebruiken var in een veld, alleen op lokale variabelen.

Maar zelfs dit zal niet werken:

Site master = Master as Site;

Omdat je niet kunt gebruiken this in een veld en Master as Site is hetzelfde als this.Master as Site. Dus initialiseer gewoon het veld van Page_Init wanneer de pagina volledig is geïnitialiseerd en u kunt gebruiken this:

Site master = null;

protected void Page_Init(object sender, EventArgs e)
{            
    master = this.Master as Site;
}

3
2018-03-22 15:05



Ik heb hiervoor een hulpmethode in mijn System.Web.UI.Page-klasse

protected T FindControlFromMaster<T>(string name) where T : Control
{
     MasterPage master = this.Master;
     while (master != null)
     {
         T control = master.FindControl(name) as T;
         if (control != null)
             return control;

         master = master.Master;
     }
     return null;
}

dan kunt u toegang krijgen via onderstaande code.

Label lblStatus = FindControlFromMaster<Label>("lblStatus");
if(lblStatus!=null) 
    lblStatus.Text = "something";

3
2018-05-20 18:16



Dit is ingewikkelder als u een geneste MasterPage heeft. U moet eerst het contentbeheer vinden dat de geneste MasterPage bevat en vervolgens het besturingselement op uw geneste MasterPage vinden.

Cruciaal stukje: Master.Master.

Kijk hier: http://forums.asp.net/t/1059255.aspx?Nested+master+pages+and+Master+FindControl

Voorbeeld:

'Zoek de inhoudscontrole

Dim ct Als ContentPlaceHolder = Me.Master.Master.FindControl ("cphMain")

'vind nu besturingselementen binnen die inhoud

Dim lbtnSave As LinkButton = ct.FindControl ("lbtnSave")


1
2018-01-19 17:29