web-dev-qa-db-ja.com

ページ間でセッション変数を渡す

Asp.netセッションを使用してページ間で変数を渡す際の問題は何なのかと思います。

何が起こっているのかを確認するために、コードを1つのテキストボックスだけに減らしました。テキストボックスの値を取得して確認ページに表示しようとしています。ボタンをクリックすると、2ページ目に移動しますが、ラベルが空白です。はい、私のポストバックURLは2ページ目を指しています。

これがボタンのクリックです。

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

2ページ目のページ読み込みは次のとおりです。

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

私がこれを長く見ていて何かを見逃していない限り。私は既にMSDNから "方法:セッション状態から値を読み取る" を読みました。

6
Troy Bryant

PostBackUrlを2番目のページに設定したと言います。そのようにする場合は、Page.PreviousPageを使用してテキストボックスにアクセスする必要があります。しかし、これが最も簡単な方法です。

まず、PostBackUrlをそのままにしておきます。 PostBackUrlを2番目のページに設定するということは、最初のページではなく、2番目のページにボタンのクリックを処理するように指示することを意味します。したがって、セッション変数は決して設定されず、プルしようとするとnullになります。

これはうまくいきます。

はい、QueryStringを使用してこれを行うこともできますが、ユーザーに表示/編集させたくない場合は、Session変数の方が適しています。

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

次に、2番目のページ(ToString()は本当に必要ありません):

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

[〜#〜] edit [〜#〜]-ボタンのクリックが実際に発生することを確認してください。ほとんどの作業はC#ではなくVB.NETで行うため、誰かがこれを間違って修正する可能性があります。ただし、OnClick値を指定しない場合、関数は呼び出されません。

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

2ページ目

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

Server.Transfer()の代わりにResponse.Redirect()を使用できます

0
Amna Riaz

投稿したコードは問題ないようなので、問題はおそらくセットアップにあります。

このリンクをチェックしてください ASP.NETセッション状態の概要 およびCookieless SessionIDsのセクションに特に注意してくださいおよびセッション状態の構成

0
slugster

最初のページでセッション変数を設定した後にリダイレクトを行っていますか?チェックアウト この記事 機能させる方法について。基本的に、これを機能させる方法は、オーバーロードリダイレクトメソッドを使用することです。

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

Falseパラメータは、.netが既存のページ(実際にセッション状態を書き出す)での処理を終了しないようにします

0
Gary Walker

セッションを追加したとは思わない。これが私のやり方です。

最初のページ

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

2ページ目

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

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

だからあなたのもので、私はあなたが必要だと思います。

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

2ページ目にあるものが機能するはずですが、機能しない場合は、ToString()を追加します。

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

これが役立つかどうか教えてください!

0
Humpy