2

我正在嘗試使用會話變量執行某些操作之前測試值。 這是用於初始化(正如你可以看到會議(「舍曼」)是字符串的列表:檢查空值時爲空錯誤

 @If (IsDBNull(Session("Chemin")) Or (ViewContext.RouteData.Values("action") = "Index")) Then 
     @Code Dim lst As New List(Of String)() 
     Session("Chemin") = lst // Initialisation 
    End Code 
End If 

但問題是這裏的測試:

@If (Not IsDBNull(ViewContext.RouteData.Values("action")) AndAlso Not IsDBNull(Session("Chemin")) AndAlso Not Session("Chemin").Contains((ViewContext.RouteData.Values("action").ToString()))) Then 

我有時會

System.NullReferenceException

我不明白,因爲我只是測試它,但它會引發錯誤。 所以我的問題是:爲什麼以及何時發生?如何解決這個問題? 編輯:不重複,因爲不是一個簡單的System.NullReferenceException

+0

嘗試將其更改爲 'ViewContext.HttpContext.Request.QueryString.Get( 「行動」);' –

+0

的ToString不能返回System.DbNull這是什麼IsDbNull比較它,你的評估總是會返回false。 – Esko

+0

Esko,沒有ToString,這是一樣的,我把它放在那裏,因爲我很絕望,以後我會用它。我同意這是愚蠢的 –

回答

1

就應該替換所有的IsDBNullIsNothing,那是你在找什麼在這種情況下。因爲我認爲你的

@If (IsDBNull(Session("Chemin")) 

無法通過,因此會話(「Chemin」)可能是沒有。

你應該檢查一下ViewContext,ViewContext.RouteData,ViewContext.RouteData.ValuesViewContext.RouteData.Values("action")不是萬能的。

你可以用這個做到這一點:

           @Code Dim values = ViewContext?.RouteData?.Values End Code 
             @If (values IsNot Nothing) // And the rest of your tests 
0

第一:的DBNull是不一樣的空(這是在VB俚語Nothing)。所以你應該檢查這個方法IsDbNull()是否崩潰,如果你這樣稱呼它:IsDbNull(Nothing)。 我這麼認爲,但我不確定。如果是這樣,添加額外的空檢查,你很好。

如果問題仍然存在,讓下潛更深:

是像ViewContext.RouteData.Values("action")表達鏈中的所有屬性可能爲空。這意味着如果ViewContext,RouteData甚至Values都爲空,這個異常將被拋出。

Session本身相同:它是一種值容器,您檢查該容器中給定鍵上的值是否爲空。但是,如果Session本身爲空,該怎麼辦?同樣適用於Values屬性。

基本上這會轉化爲null.ElementAt("Chemin")。這會在周圍的IsDbNull()被調用之前崩潰。

所以,你可能會檢查這樣的:

Session Is Nothing OrElse IsDBNull(Session("Chemin")) 
' note: you might want to check if the session contains the key before getting a value with it 

而且

Dim values = ViewContext?.RouteData?.Values ' see "Elvis Operator" for the question marks 
If (values IsNot Nothing AndAlso values("action") = "Index") Then 
+0

如果會話爲空我該如何取消它null?會話可以爲空嗎?順便說一句,錯誤是在第二個那麼爲什麼它會通過第一個而不是第二個呢? –

+0

如果第一個測試沒問題,那麼你的'Session'屬性不是null。在這種情況下,你可以關注第二個測試並檢查屬性鏈的空值 - 這是非常基本的東西,我不會在這裏解釋。 – Waescher