2016-07-24 14 views
0

私はあるページのテキストボックスから変数を取得し、別のページに表示するために変数を渡そうとしています。セッションを使用する必要があるように思えます(これは、この課題が対象としていたトピックなので)。コメントアウトされたコードは、私が試したことのないさまざまな方法です。スタートページ別のWebページに変数を渡す

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     UnobtrusiveValidationMode = System.Web.UI.UnobtrusiveValidationMode.None; 
    } 

    //This is a button link that sends to the next page, "Results" 
    protected void cbtnlSubmit_Click(object sender, EventArgs e) 
    { 
     string sName = ""; 
     int sSize = 0; 
     string sTopping = ""; 
     decimal sPrice = 0M; 

     if (IsPostBack) 
     { 
      Validate(); 

      if (IsValid) 
      { 
       sName = ctbName.Text; 
       sSize = Convert.ToInt32(ctbSize.Text); 
       sTopping = ctbTopping.Text; 
       sPrice = Convert.ToDecimal(ctbPrice.Text); 
       if (string.IsNullOrEmpty(sTopping) == true) 
       { 
        sTopping = "cheese"; 
       } 

       /* DOESN'T WORK 
       Session.Add(sName, sSize); 
       Session.Add(sTopping, sPrice); 
       Server.Transfer("Results.aspx"); 
       */ 

       /*DOESN'T WORK 
       Session["pizza"] = new Pizza() 
       { 
        name = sName, 
        size = sSize, 
        topping = sTopping, 
        price = sPrice 
       }; 
       */ 

       //ALSO DOESN'T WORK 
       Session["name"] = sName; 
       Session["size"] = sSize; 
       Session["topping"] = sTopping; 
       Session["price"] = sPrice; 
       Response.Redirect("Results.aspx"); 
      } 
     } 
    } 
} 

これは、どちらのページが表示された変数

public partial class Results : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (Session.Count != 0) 
     { 
      lblName.Text = Session["name"].ToString(); 
      string size = Session["size"].ToString(); 
      string topping = Session["topping"].ToString(); 
      string price = Session["price"].ToString(); 
      string pizzaInfo = (size + " inch pizza with " + topping + " for $" + price.ToString()); 
      lblPizzaInfo.Text = pizzaInfo; 

      /* 
      string name = Session.Keys[0]; 
      int size = Convert.ToInt32(Session[name]); 
      string topping = Session.Keys[1]; 
      decimal price = Convert.ToDecimal(Session[topping]); 

      string pizzaInfo = (size.ToString() + " inch pizza with " + topping + " for $" + price.ToString()); 
      lblName.Text = name; 
      lblPizzaInfo.Text = pizzaInfo; 
      */ 
     } 
     lblName.Text = "Meaghan"; 
    } 
} 

が表示されます "結果" ページです。セカンダリページの最後に設定されたlblName.Textは、ラベルが表示されていることを確認するテストですが、セカンダリページに情報が渡されていません。そのラベルは、if文の外側に置くだけで表示されます。 if文の中には何も実行されません。私は推奨された質問を読もうとしましたが、私は両方のページで "sessionState"を有効にする必要があることを発見しましたが、プログラムはまだ動作しません。

プロパティでEnableSessionStateをTrueに設定しましたが、aspxファイルの先頭にEnableSessionState = "True"と表示されます。私はweb.configファイルに追加しました。セッション状態モードは "InProc"モードだと思いますか?

セッション["test"] = "Hello"をデフォルトページに、Response.Write(Session ["test"])を結果ページに追加しようとしました。今度は、lblName.Text = Session ["name"]。ToString()[if文の内部]にNullReferenceExceptionをスローします。

+0

デバッグするには、単にページ1のPage_Loadの内側に、セッションの1つをハードコーディングしてみてください。例えば'Session [" test "] =" Hello "' 2ページ目にもう一度page_loadで 'Response.Write(Session [" test "]);'何か起こったのですか? – Delosdos

+0

Jaquelineサイトへようこそ。あなたのタイトルからキーワードを削除しました。これがタグセクションの目的です。 [どのようなセッションモード](http://stackoverflow.com/search?q=%5Basp.net%5D+session+mode)セットアップしましたか? – slugster

+0

こんにちはジャクリーン、これまたは任意の答えがあなたの質問を解決した場合は、[それを受け入れる](http://meta.stackexchange.com/q/5234/179419)をチェックしてください。これは、あなたが解決策を見つけたことを広範なコミュニティに示し、回答者とあなた自身の両方にいくつかの評判を与えます。これを行う義務はありません。 – Seany84

答えて

0

あなたは、プロジェクトのルートでごWeb.configに以下のものが必要です。あなたはあなたの設定ファイルにこのエントリを持っている場合

<sessionState mode="InProc" cookieless="false" timeout="10" /> 

あなたは確認してかしてくださいことはできますか?

は、sessionState

<configuratio> 
    <system.Web> 

さらに情報の下に配置する必要があります。https://msdn.microsoft.com/en-us/library/h6bb9cz9(v=vs.71).aspx

関連する問題