2013-10-28 34 views
0

使用C#,asp.net在2010年VWDstring.IsNullOrEmpty()方法不處理會話變量正確

我在的Site.Master(用於測試目的)手動分配一個會話變量。我設定爲值:會話[「參數userid」] =(int)的數目

在我的網頁,我有以下代碼:

 litmsg.Text = "userid = " + Session["userid"].ToString(); 

     if (string.IsNullOrEmpty(Session["userid"] as string)) 
     { 
      Session["errmsg"] = "No user ID is specified"; 
      litmsg.Text = litmsg.Text + " inside loop"; 
      // Response.Redirect("/PageError.aspx"); 
     } 
     return; 

在執行期間,在litmsg.Text的值是正確的用戶ID,它告訴我Session [「userid」]必須有一個值。但是,如果它有一個值,那麼string.IsNullOrEmpty()應該返回false,這意味着不應該執行正文,並且我不應該看到「inside loop」這個短語。

的string.IsNullOrEmpty()也似乎在我的PageError頁失敗:

protected void Page_Load(object sender, EventArgs e) 
{ 
     if (!Page.IsPostBack) 
     { 
      string strErrMess = string.IsNullOrEmpty(Session["errmess"] as string) ? 
        "Unspecificed error message" : 
        Session["errmess"].ToString(); 

      errmess.Text = strErrMess; 
     } 
} 

在這種情況下,報告未指定的消息,甚至當我已經爲會話的值[「errmess」] 。

事情是我在其他情況下使用這個成語,它似乎工作 - 它只有當我將它應用到會話變量我有一個問題。有什麼我失蹤

我發現在引用會話變量時使用的PREVIOUS版本的錯誤,但這些引用表明該錯誤已在當前版本中修復。例如,這裏:C# String.IsNullOrEmpty: good or bad?

我喜歡這個成語,因爲我已經在其他地方使用它了。有沒有更好的方法來做到這一點?一個工程?或者也許我做錯了什麼。

+0

在檢查它是否爲字符串之前,您沒有調用'ToString()'。你給它賦予一個int值,當然這不是一個字符串。 –

+0

我認爲如果值爲null,它可能會失敗ToString()。 – elbillaf

回答

3

嘗試:

string strErrMess = (Session["errmess"] == null) 
    ? "Unspecificed error message" 
    : Session["errmess"].ToString(); 

您鑄造它作爲一個字符串測試,如果它是空過,所以它拋出的錯誤。

+0

在我的情況下,我將意義反轉爲== null || ==「」,但是有效! 謝謝! – elbillaf

+0

肯定的事情。請務必首先執行空檢查,因爲如果失敗(因此不會拋出異常),右側將不會被評估, – Jonesopolis

1

如果您將int轉換爲string,則會導致空引用,因爲它無法轉換爲該類型。因此,string.IsNullOrEmpty方法將返回true。