2016-07-24 35 views
0

我想從一個頁面中的文本框中獲取變量,然後將它們傳遞到另一個頁面中顯示。好像我應該使用會話(因爲這是這個任務的主題)。註釋掉的代碼是我試過的各種方法都沒有奏效。將變量傳遞給另一個網頁

在起始頁:

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」模式?

我嘗試在默認頁面和Response.Write(Session [「test」])中添加Session [「test」] =「Hello」到Results頁面。現在它會在lblName.Text = Session [「name」]。拋出一個NullReferenceException。ToString()[在if語句內]。

+0

要調試,嘗試硬編碼的會議之一,只是在一個頁面上的Page_Load裏面。例如'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

回答

相關問題