2017-02-25 24 views
0

ASPX會話狀態空例外,我似乎無法得到一個會話變量就回傳讀取,即使下面的簡單代碼:上回發

Default.apsx:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" 

Inherits="_Default" %> 

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
    </div> 
     <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" AutoPostBack="true" Text="Button" /> 
    </form> 
</body> 
</html> 

代碼隱藏:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (IsPostBack) 
     { 
      varcheck(Session["MyVar"].ToString()); 
     } 
    } 

    protected void varcheck(string checker) 
    { 
     System.Diagnostics.Debug.WriteLine(checker); 
    } 

    protected void Button1_Click(object sender, EventArgs e) 
    { 
     string ret_val = "Return this on postback"; 
     Session["MyVar"] = ret_val; 

    } 
} 

我得到:

An exception of type 'System.NullReferenceException' occurred in App_Web_5mcbvlrk.dll but was not handled in user code 
Additional information: Object reference not set to an instance of an object. 

我缺少的東西?不應該在點擊按鈕時設置Session變量並在Postback上閱讀?它是否需要全局設置?

+0

停止使用會話請 –

回答

0

這是因爲當你點擊按鈕,它並不直接,因此加載Page_Load第一,然後它去活動,所以你應該把支票去Button1_Click事件從頂部進入底部

 if (IsPostBack && Session["MyVar"] != null) 
     { 
      varcheck(Session["MyVar"].ToString()); 
     } 

,如果Session["MyVar"]不是null,因爲這將是第一postback空它不會拋出異常

編輯1

如果不想使用會話可以使用靜態變量來存儲數據

public static string MyVar; 
    protected void Page_Load(object sender, EventArgs e) 
    { 


    if (!string.IsNullOrWhiteSpace(MyVar)) 
    { 
     varcheck(MyVar); 
    } 
} 

,你可以像

protected void Button1_Click(object sender, EventArgs e) 
    { 
     if (string.IsNullOrWhiteSpace(MyVar)) 
     { 
     MyVar= "Return this on postback"; 
     varcheck(MyVar); 

     } 

    } 
+0

上點擊設置的值,所以得到的回發的實際值,我在技術上必須做2回發?是否有更好的選擇來設置變量並在回發中正確讀取它? –

+0

你可以聲明靜態字段來存儲數據 – Usman

+0

我已經更新了我的答案 – Usman