2016-07-24 39 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

回答

相关问题