2013-10-28 54 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。