2011-07-28 40 views
1

嘿只是想知道如何發生以下情況未將ASP.NET會話對象引用設置爲對象的實例

未將對象引用設置爲對象的實例。

customerName.Text =會議( 「username」 的)。toString()方法

If (Session("userId") Is Nothing) Then 
     Response.Redirect(ConfigurationManager.AppSettings("site_base_url").ToString & "login/", False) 
    End If 

    customerName.Text = Session("userName").ToString() 

現在,我目前還沒有會話此頁面上設置。所以會話是NULL,但我只是想知道爲什麼我的if語句正在處理這個問題,爲什麼它甚至試圖進入下一部分,即Response.Write?

+0

之前,您'userName'會話變量爲null,當你最初嘗試爲你的文本字段分配'userName'時,它應該會崩潰。這是行爲發生的地方嗎?你在問題中說過,沒有會話此時設置的變量。 –

+0

你確定會話對象爲空嗎?測試你的假設。 –

+0

嘿喬治,這是一直讓我瘋狂的東西,只是不能理解。在上面的腳本中,我所有的會話變量都是空的,我知道這一點。但據我可以看到代碼進入if語句,因爲會話爲空因此會話(「userId」)是沒有事實,它應該重定向到登錄。爲什麼哦,爲什麼,它超越了將會話「用戶名」附加到字面上的嘗試 – StevieB

回答

1

從您的代碼段,它看起來像行Response.Write(Session("UID").ToString)總是不管發生什麼執行與上面的if聲明。

我不知道這個奇怪的縮進是不是讓你感到困惑。試着看它是這樣的:

If (Session("userName") IsNot Nothing) Then 
    customerName.Text = Session("userName").ToString() 
End If 

Response.Write(Session("UID").ToString) 

請注意,我對齊End If與上述對應IfResponse.Write...爲好。 Response.Write...行顯然位於If塊之外,並且由於If塊中沒有返回,中斷或繼續,因此它將始終執行。

而順便說一句,它可能不是空的Session對象。您正在對您假設包含在Session對象中的項目調用ToString。會話更可能不包含「UID」條目。

+0

對不起,看到我的編輯,我發佈了錯誤的代碼。我的意思是不應該重定向照顧空會議爲什麼它超越並嘗試加載會話(「userName」) – StevieB

0

Response.Write()IF聲明之外,所以無論是否會話Is Nothing,該Response.Write()方法將跑。


另外,也許你試圖給會話分配一個值,如果它沒有一個?在這種情況下,我覺得你有你的代碼在反向:

customerName.Text = Session("userName").ToString() 

應該是:

Session("userName") = customerName.Text 
+0

對不起,看到我的編輯,我發佈了錯誤的代碼。我的意思是不應該重定向照顧空會話爲什麼它超出並嘗試加載會話(「userName」) – StevieB

0

customerName.Text = Session("userName").ToString(); 

將不管什麼會議的價值被執行。在if條件下,您正在檢查(會話(「用戶ID」)而不是會話(「用戶名」)。它們都是不同的會話變量。值沒有事先分配,你會得到「對象引用不設置到對象的實例」異常。 我會做一個會話空檢查第一的價值顯然分配給customerName.Text

if(Session("userName") IsNot Nothing) Then 
    customerName.Text = Session("userName").ToString();  
+0

Vinay,謝謝你的回覆。是的,我明白你在說什麼。但讓我們說,我有10個用戶會話變量,我不想去即如果(會話(「用戶名」)是不是沒有和如果(會話(「電子郵件」)不是沒有和如果(會話(「用戶ID」)不是什麼等。 ..我只是想:如果我檢查會話變量1,即像userId這樣的強大的變量,我可以簡單地檢查這個變量爲null嗎? – StevieB

+0

Stevie,這可能聽起來很愚蠢,但是你確定會話(userId)爲空嗎?我想會話(「userId」)在某處被分配了一些值,我會用Session(「UserName」)嘗試同樣的事情,看看它是否與session(「userId」)的行爲方式相同。 – Vinay

相關問題