Asp.net mvc ViewData[";s";].ToString()与Request.QueryString[";s";].ToString(),如果;s";从来没有设定过?

Asp.net mvc ViewData[";s";].ToString()与Request.QueryString[";s";].ToString(),如果;s";从来没有设定过?,asp.net-mvc,query-string,viewdata,Asp.net Mvc,Query String,Viewdata,如果在我的控制器中: public ActionResult Index() { //no code implied return View; } 然后在返回的视图中: <%if(ViewData["SomeString"].ToString() != "True") {%> show this <%}%> 显示这个 我将在运行时收到一个错误,因为对象引用没有对象 但是,在我所做的页面内: <%if(Request.QueryString[

如果在我的控制器中:

public ActionResult Index()
{
     //no code implied
     return View;
}
然后在返回的视图中:

<%if(ViewData["SomeString"].ToString() != "True") {%> show this <%}%>
显示这个
我将在运行时收到一个错误,因为对象引用没有对象

但是,在我所做的页面内:

<%if(Request.QueryString["Something"].ToString() != "True") {%> show this <%}%>
显示这个
更新:我确实得到了错误


编辑:看起来它们的行为毕竟是一样的。

对于不存在的键,
ViewData
QueryString
都将返回
null
。当您试图对
null
对象引用调用一个方法(在您的例子中是
ToString
)时,您会得到一个
null引用异常


我不确定在这种情况下有什么不清楚。

对于不存在的键,
ViewData
QueryString
都将返回
null
。当您试图对
null
对象引用调用一个方法(在您的例子中是
ToString
)时,您会得到一个
null引用异常


我不确定在这种情况下有什么不清楚。

谢谢,现在这是有道理的。NullReferenceException是由ToString()调用而不是比较引起的(如果排除了ToString,则在与字符串进行比较时,即使引用了不存在的键,也不会出错)。谢谢,这现在是有意义的。NullReferenceException是由ToString()调用而不是比较引起的(如果排除了ToString,则在与字符串进行比较时,即使引用了不存在的键,也不会出错)。对NameValueCollection项调用ToString是重复的。值已为字符串。在ViewDataCollection中,可以是任何对象,如果(!(bool)ViewData[“SomeString”]),为什么不简单地编写呢?更好的方法是使用强类型ViewData.Model。在NameValueCollection项上调用字符串是重复的。值已为字符串。在ViewDataCollection中,可以是任何对象,如果(!(bool)ViewData[“SomeString”]),为什么不简单地编写呢?更好地使用强类型ViewData.Model。