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; }
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; }
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.
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
}
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";
}
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 ?
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 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.