web-dev-qa-db-fra.com

Passer la variable de session de page en page

Je me demande quel est mon problème sur le passage d'une variable de page en page en utilisant asp.net session.

J'ai réduit le code à une seule zone de texte pour savoir ce qui se passait. J'essaie simplement de prendre la valeur d'une zone de texte et de l'afficher sur une page de confirmation. Lorsque le bouton est cliqué, il me renvoie à la deuxième page mais son étiquette est vide. Oui, mon URL post retour pointe vers la deuxième page.

Voici le clic du bouton:

protected void submit_Click(object sender, EventArgs e)
{
    string name = txtFirstName.Text.Trim();
    Session["name"] = name;
}

Voici le chargement de page de la deuxième page:

protected void Page_Load(object sender, EventArgs e)
{
    lblName.Text = (string)(Session["name"]);
}

À moins que je ne regarde ça depuis trop longtemps et que je manque quelque chose. J'ai déjà lu "Comment: lire les valeurs de l'état de session" à partir de MSDN.

6
Troy Bryant

Vous dites que vous avez défini PostBackUrl sur votre deuxième page. Si vous voulez le faire de cette façon, vous devez utiliser Page.PreviousPage pour accéder à votre zone de texte. Mais c'est le moyen le plus simple:

Tout d'abord, laissez le PostBackUrl seul. Si vous définissez PostBackUrl sur votre deuxième page, vous indiquez à la SECONDE PAGE de gérer le clic de votre bouton, pas la première page. Par conséquent, votre variable de session n'est jamais définie et est nulle lorsque vous essayez de la récupérer.

Cela devrait marcher pour toi.

Et oui, vous pouvez également le faire avec un QueryString, mais si c'est quelque chose que vous ne voulez pas que l'utilisateur voit/modifie, alors une variable de session est préférable.

 protected void submit_Click(object sender, EventArgs e)
 {
      string name = txtFirstName.Text.Trim();
      Session["name"] = name;
      Response.Redirect("PageTwo.aspx");
 }

Ensuite, dans la deuxième page (vous n'avez pas vraiment besoin de ToString ()):

 protected void Page_Load(object sender, EventArgs e)
 {
      if (Session["name"] != null)
      {
           lblName.Text = Session["name"].ToString();
      }
 }

EDIT- Assurez-vous que le clic de votre bouton est effectivement déclenché. Quelqu'un peut me corriger, car je fais l'essentiel de mon travail dans VB.NET, pas en C #. Mais si vous ne spécifiez pas la valeur OnClick, votre fonction ne sera pas appelée.

 <asp:Button ID="Button1" runat="server" Text="Click Me!" OnClick="submit_Click" />
6
dotnetcanuck

Pour la deuxième page

protected void Page_Load(object sender, EventArgs e)
{
    if (Session["value"] != null)
    {
        Label1.Text = Session["value"].ToString();

    }
    else 
    {
        Label1.Text = "Sorry,Please enter the value  ";
    }
}
0
Deepak Kumar

Vous pouvez utiliser Server.Transfer() au lieu de Response.Redirect()

0
Amna Riaz

Le code que vous avez posté a l'air bien, donc votre problème vient probablement de l'installation.

Vérifiez ce lien Vue d'ensemble de l'état de session ASP.NET et accordez une attention particulière aux sections sur Cookieless SessionIDs et Configuration de l'état de session.

0
slugster

Faites-vous une redirection après avoir défini la variable de session sur la première page, si cela ne fonctionne pas correctement (sauf si vous connaissez le truc). Commander cet article pour que cela fonctionne. Fondamentalement, la façon de faire ce travail est à la méthode de redirection de surcharge.

Response.Redirect("~/newpage.aspx", false);

Le paramètre false empêche .net de terminer le traitement sur la page existante (qui écrit en fait l'état de session)

0
Gary Walker

Je ne pense pas que vous ayez ajouté la session. C'est comme ça que j'ai fait le mien. 

Première page

protected void btnView_Click(object sender, EventArgs e)
        {
            foreach (ListItem li in lbxCheckDates.Items)
            {
                if (li.Selected == true)
                {
                    lblMessage.Text = "";
                    string checkDate = lbxCheckDates.SelectedItem.Text;
                    Session.Add("CheckDates", checkDate);
                    Page.ClientScript.RegisterStartupScript(
                    this.GetType(), "OpenWindow", "window.open('Paystub.aspx','_newtab');", true);
                }
            }
        }

Deuxième page

protected void Page_Load(object sender, EventArgs e)
       {
            string checkDate = (string)(Session["CheckDates"]);

            //I use checkDate in sql to populate a report viewer
        }

Donc, avec le tien, je pense que tu as besoin de ..

protected void submit_Click(object sender, EventArgs e)
    {
        string name = txtFirstName.Text.Trim();
        Session.Add("Name", name);
    }

Je pense que ce que vous avez dans la deuxième page devrait fonctionner, mais si ce n’est pas le cas, ajoutez ToString () comme ceci:.

lblName.Text = (string)(Session["name"]).ToString();

Faites-moi savoir si cela aide! 

0
Humpy