-2 votes

ASP.NET : comment accéder aux propriétés publiques ?

J'ai deux pages page1.aspx et page2.aspx, les deux ont du code derrière avec des classes partielles. Comment puis-je accéder à la propriété publique message de la page1.aspx depuis la page2.aspx ?

public string message { get; set; }

1voto

Aristos Points 40367

Mise à jour

Je viens de lire que l'un est MasterPage et l'autre est le client de MasterPage ? Alors c'est une autre façon de faire.

Page à page

Si vous avez 2 pages simples et différentes. Je l'ai fait de cette façon. C'est une valeur de poste, en utilisant des astuces asp.net :)

Sur Page2.aspx ajoutez ceci sur le dessus.

<%@ PreviousPageType VirtualPath="Page1.aspx" %>

et comment je lis de Page1.aspx sur le code derrière

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        if (Page.PreviousPage != null)
        {
            if(Page.PreviousPage.IsCrossPagePostBack == true)
            {
                txtGetItFromPreviusPage.Text = PreviousPage.SomeString;
            }
        }
    }
}

Sur Page1.aspx le bouton qui m'envoie à Page2.aspx

<asp:Button ID="btnEna" runat="server"  Text="Send Some variables to other page" 
    PostBackUrl="Page2.aspx" 
    onclick="btnMoveSelection_Click" />                 

et le code que j'utilise pour les calculs de la page 1 ou d'autres choses.

public string SomeString
{
    set 
    { 
        ViewState["txtSomeString"] = value;
    }
    get
    {
        if (ViewState["txtSomeString"] != null)
            return ViewState["txtSomeString"].ToString();
        else
            return string.Empty;
    }
}

protected void btnMoveSelection_Click(object sender, EventArgs e)
{
    // some final calculations

}

1voto

Aristos Points 40367

Si l'une est la page maître, et l'autre est la page qui utilise le maître.

La page principale

<body>
    <form id="form1" runat="server">
    <div>
        <asp:Literal runat="server" ID="txtOnMaster"></asp:Literal>
        <br />
        <asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">        
        </asp:ContentPlaceHolder>
    </div>
    </form>
</body>

et le code derrière

public partial class Dokimes_StackOverFlow_MasterPage : System.Web.UI.MasterPage
{
    public string TextToMaster
    {
        get { return txtOnMaster.Text; }
        set { txtOnMaster.Text = value; }        
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        // here I find the control in the client page
        Control FindMe = ContentPlaceHolder1.FindControl("txtOut");

        // and if exist I set the text to client from the master   
        if (FindMe != null)
        {
            ((Literal)FindMe).Text = "Get from Master Page";
        }
    }
}

et maintenant la Page1.aspx qui contient la page principale précédente.

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    <asp:Literal runat="server" ID="txtOut"></asp:Literal>  
</asp:Content>

et le code

protected void Page_Load(object sender, EventArgs e)
{
    // here I set the text on master page from client
    ((Dokimes_StackOverFlow_MasterPage)Master).TextToMaster = "Set from Client";
}

1voto

eliberatus Points 11

Si vous n'êtes PAS dans un environnement sans session, alors dans la page de l'émetteur, poussez votre chaîne (ou votre objet - par exemple, un dictionnaire) dans la session :

Session("MyVar") = "WhatEver"

Dans la page du récepteur, vous pouvez le récupérer avec :

MyPreviousVar = Session("MyVar")

0voto

Paddy Points 16834

Vous ne devriez pas vraiment faire ça, les pages devraient être des entités autonomes. Si vous avez besoin de transmettre ces données d'un formulaire à un autre, envisagez d'utiliser la chaîne de recherche ou d'afficher votre formulaire sur la deuxième page.


OK. Avez-vous essayé ensuite Page.Master.Property ?

0voto

Barry Points 18913

Si vous voulez une propriété de message sur chaque page. Vous pourriez implémenter votre propre BasePage et définir la propriété message dans votre page de base. Puis dériver les pages suivantes de votre page de base personnalisée. De cette façon, toutes vos pages auront toujours une propriété de message.

Cependant, cela ne permet pas de maintenir la propriété du message constante sur chaque page. Si vous essayez de transmettre des valeurs entre les pages, vous devez utiliser l'état de la session ou une chaîne de requête.

Este MSDN peut vous être utile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X