查询字符串错误

时间:2013-03-15 10:48:33

标签: c# request.querystring

为什么此代码会抛出NullReferenceException

例外:

System.NullReferenceException: Object reference not set to an instance of an object.

代码:

if ((string.IsNullOrEmpty(Request.QueryString["Sno"].ToString())) 
   && (string.IsNullOrEmpty(Request.QueryString["Name"].ToString())))
{
    lblBookedBy.Text = "";
    lblSno.Text = "";
}
else
{
    lblBookedBy.Text = Request.QueryString["Name"].ToString();
    lblSno.Text = Request.QueryString["Sno"].ToString();
}

6 个答案:

答案 0 :(得分:2)

我建议您执行以下操作。

if (Request.QueryString["Sno"] == null || Request.QueryString["Name"] == null)
{
    lblBookedBy.Text = "";
    lblSno.Text = "";
}
else
{
    lblBookedBy.Text = Request.QueryString["Name"].ToString();
    lblSno.Text = Request.QueryString["Sno"].ToString();
}

您最有可能在NullReference声明中获得if。这样你肯定不会遇到这种情况,最糟糕的情况是如果两个变量都被实例化,但是一个或多个包含空字符串,它只会将Text设置为empty

或者,如果您使用Convert.ToString其他建议,可以跳过if语句来简化代码。

lblBookedBy.Text = Convert.ToString(Request.QueryString["Name"]);
lblSno.Text = Convert.ToString(Request.QueryString["Sno"]);

在最坏的情况下,其中一个将是Null,并且会导致其中一个TextBox显示结果,而另一个则为空。

另外,假设Request.QueryString支持它,您可以使用TryGetValue

答案 1 :(得分:1)

您正在尝试将Request.QueryString["Sno"]投射到字符串,而其值为null

答案 2 :(得分:1)

这很可能是因为集合查询字符串中没有键“Sno”或“Name”,当尝试在其上调用.ToString()时会导致异常。

在调用.ToString()

之前检查Request.QueryString [“Sno”]或Request.QueryString [“Name”]是否为null

答案 3 :(得分:1)

如果Request.QueryString["Sno"]Request.QueryString["Name"]没有返回任何对象,则调用ToString会抛出异常

答案 4 :(得分:1)

在null检查中删除.ToString(),因为当查询字符串参数不可用时,您试图将cast null变量键入string ....

if ((string.IsNullOrEmpty(Convert.ToString(Request.QueryString["Sno"]))) && (string.IsNullOrEmpty(Covert.ToString(Request.QueryString["Name"]))))

答案 5 :(得分:-1)

使用Convert.ToString()代替.ToString()以避免空引用异常:

if (string.IsNullOrEmpty(Convert.ToString(Request.QueryString["Sno"])) && string.IsNullOrEmpty(Covert.ToString(Request.QueryString["Name"])))
{
    lblBookedBy.Text = "";
    lblSno.Text = "";
}
else
{
    lblBookedBy.Text =Convert.ToString(Request.QueryString["Name"]);
    lblSno.Text =Convert.ToString(Request.QueryString["Sno"]);
}