【问题标题】:ViewData["s"].ToString() vs. Request.QueryString["s"].ToString(), what is returned if "s" was never set?ViewData["s"].ToString() 与 Request.QueryString["s"].ToString(),如果 "s" 从未设置,返回什么?
【发布时间】:2010-08-10 14:15:07
【问题描述】:

如果在我的控制器中:

public ActionResult Index()
{
     //no code implied
     return View;
}

然后在返回的视图中:

<%if(ViewData["SomeString"].ToString() != "True") {%> show this <%}%>

由于对象引用没有对象,我会在运行时出错。

但是在我做的页面内部:

<%if(Request.QueryString["Something"].ToString() != "True") {%> show this <%}%>

更新:我确实得到了错误。

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

【问题讨论】:

  • 在 NameValueCollection 项上调用 ToString 是重复的。值已经是字符串。在 ViewDataCollection 中可以是任何对象,为什么不简单地写 if(!(bool)ViewData["SomeString"]) ?最好使用强类型 ViewData.Model。

标签: asp.net-mvc query-string viewdata


【解决方案1】:

ViewDataQueryString 都将返回 null 以获得不存在的密钥。当您尝试在 null 对象引用上调用方法(在您的情况下为 ToString)时,您会得到一个 NullReferenceException

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

【讨论】:

  • 谢谢,现在说得通了。 NullReferenceException 是由 ToString() 调用而不是比较引起的(如果排除 ToString,即使引用了不存在的键,在与字符串比较时也不会出错)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-30
  • 2014-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多