web-dev-qa-db-fra.com

comment accéder au contrôle de la page maître à partir de la page de contenu

J'ai une page maître qui contient une étiquette pour les messages d'état. Je dois définir le texte d'état à partir de différentes pages .aspx. Comment cela peut-il être fait à partir de la page de contenu?

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)
    {            

    }
}

J'ai essayé ceci, mais je n'ai pas réussi à le faire fonctionner:

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!");
                }                                       
            }
        }
    }                   
}
42
LeonidasFett

Dans le fichier MasterPage.cs, ajoutez la property de Label comme ceci:

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

Sur votre page aspx, juste en dessous de la directive Page, ajoutez ceci:

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

Et dans votre page codebehind(aspx.cs), vous pouvez ensuite accéder facilement au Label Property et définir sa text selon vos besoins. Comme ça:

this.Master.ErrorMessage = "Your Error Message here";
71
Praveen Nambiar

Dans la page Contenu, vous pouvez accéder à l'étiquette et définir le texte tel que

Ici 'lblStatus' est l'identifiant d'étiquette de votre maquette

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

 LblMasterStatus.Text = "Mesure de la page de contenu"; 
27
DOTNET Team

Ça marche

Pour rechercher des contrôles de page maître sur la page enfant 

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

J'ai une méthode d'assistance pour cela dans ma classe System.Web.UI.Page

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;
}

alors vous pouvez accéder en utilisant le code ci-dessous.

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

Vous ne pouvez pas utiliser var dans un champ , uniquement sur des variables locales. 

Mais même cela ne fonctionnera pas:

Site master = Master as Site;

Parce que vous ne pouvez pas utiliser this dans un champ et que Master as Site est identique à this.Master as Site. Donc, initialisez le champ à partir de Page_Init lorsque la page est complètement initialisée et vous pouvez utiliser this:

Site master = null;

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

Ceci est plus compliqué si vous avez une page maître imbriquée. Vous devez d'abord rechercher le contrôle de contenu qui contient la MasterPage imbriquée, puis rechercher le contrôle sur votre MasterPage imbriquée à partir de celui-ci.

Bit crucial: Master.Master.

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

Exemple:

'Trouver le contrôle de contenu 

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

'maintenant trouver des contrôles à l'intérieur de ce contenu 

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

1
Resource

Si vous essayez d'accéder à un élément html: il s'agit d'une ancre HTML ... 

Ma barre de navigation contient des éléments qui ne sont pas des éléments de liste (<li>) mais plutôt des ancres html (<a>). 

Voir ci-dessous: (Ceci est le maître du site) 

<nav class="mdl-navigation">
    <a class="mdl-navigation__link" href="" runat="server" id="liHome">Home</a>
    <a class="mdl-navigation__link" href="" runat="server" id="liDashboard">Dashboard</a>
</nav>

Maintenant dans votre code derrière pour une autre page, pour le mien, c'est la page de connexion ... 

Sur PageLoad (), définissez ceci: 

HtmlAnchor lblMasterStatus = (HtmlAnchor)Master.FindControl("liHome");
lblMasterStatus.Visible =false;

HtmlAnchor lblMasterStatus1 = (HtmlAnchor)Master.FindControl("liDashboard");
lblMasterStatus1.Visible = false;

Nous avons maintenant accédé aux contrôles des maîtres de site et les avons rendus invisibles sur la page de connexion. 

0
James Heffer