【问题标题】:How to solve "The name 'ViewData' does not exist in the current context"如何解决“当前上下文中不存在名称‘ViewData’”
【发布时间】:2011-06-27 22:52:54
【问题描述】:

当我尝试使用 ViewData 将数据从控制器传递到我的视图时,在我的视图中引用 ViewData 属性时,标题中出现错误

我正在使用 Razor View 引擎,有几篇与此相关的帖子,但它们似乎与 Web 表单实现相关

我怀疑 Razor 的引用方式存在问题:我的配置文件有许多警告:

这些类型引用是警告:无效的模块资格:无法解析程序集 System.Web.WebPages.Razor

通用的 MVC 工作正常(仅使用模型引用)但尝试访问 ViewData - 不走运

【问题讨论】:

  • 您使用ViewData而不是强类型视图和视图模型有什么特别的原因吗?因为我没有看到。
  • 不——我实际上只是在试验 MVC。我同意你的观点。

标签: asp.net-mvc-3 viewdata


【解决方案1】:

在 MVC3 中添加了 ViewBag。它只是 ViewData 的动态包装器。现在你可以使用类似的东西了:

ViewBag.Title = "Test"; 

使用 ViewBag 而不是 ViewData 的一个很酷的好处是,在使用 ViewBag.Date 到 DateTime、ViewBag.Post 到 Post 和 ViewBag.Tags 之前,我们不必将它们转换为字符串数组。这减少了视图中的噪音。

但正如 Darin 在评论中所说,最好使用强类型视图。

您在 web.config 中遇到的错误与此无关。但是我不确定这些错误的确切原因是什么,但似乎它不会影响应用程序的运行。

【讨论】:

  • @Thomas Jaskula,为了向后兼容,MVC3 仍然支持 ViewData。
  • ViewData 尚未重命名为 ViewBagViewBag 已添加到 ASP.NET MVC 3 中。话虽如此,这两个概念都不应该在正确架构的 ASP.NET MVC 应用程序中使用。强类型视图和视图模型是正确的方法。
  • 是的,它只是 ViewData 的动态包装器
  • 谢谢 - 使用 viewbag 语法确实有效,但我的印象是 ViewBag 只是 ViewData 的包装器,以提高可读性?
  • @Embo,是的,ViewBag 只是 ViewData 的动态包装器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 2022-01-10
  • 2021-10-04
  • 2018-12-04
  • 1970-01-01
  • 2013-10-02
  • 2014-04-22
相关资源
最近更新 更多