升级到MVC 3后出现错误:CS0103:当前上下文中不存在“View”的名称

25

我刚刚更新到了ASP.NET MVC 3 RC2。

我现在正在处理的示例应用程序每当渲染cshtml视图时都会产生以下错误:

CS0103:当前上下文中不存在名称“View”

它在以下行失败:

@{
   View.Title = "MyView";
}

...但在 Razor 文件的其他位置遇到 View 时都失败了。

我已经将一个新应用程序的 View 文件夹中的 web.config 复制到我的示例应用程序中,但问题仍然存在。

全新的应用程序可以正常运行。

我还重新构建了解决方案,运行了“清理解决方案”。但是没有成功。

我几天没碰这个示例了,所以可能与 RC2 无关的问题...


已经检查了引用,它们似乎是相同的文件版本。例如:System.Web.Mvc文件版本:3.11209.0适用于我使用RC1开发的示例应用程序和使用RC2创建的新应用程序。 - awrigley
3个回答

28

这个被重命名为 'ViewBag'。你可以在这里阅读有关从RC1到RC2的更改的更多信息。


谢谢,我忽略了Scott Guthrie博客文章中的那一部分。不知道你为什么认为这很奇怪——在视图中有显示逻辑是可以的。有很多示例使用它。我认为ViewBag是一个可怕的名称,但它比普通的View更具描述性。 - awrigley
@awrigley 确定在视图中使用显示逻辑是可以的,但 ViewBag 旨在成为通常在控制器中设置以在视图中使用的属性集合... 我相信您有一个有效的用例,但我无法理解为什么您想要在视图内部设置 ViewBag 中的数据,我只期望从中“读取”。 - jeroenh
6
“ViewBag”现在将成为我称呼不喜欢的人的默认名称。 - Webjedi
@awrigley 最终重新审视了这个问题;在视图中调用它的原因是为了将信息(在这种情况下是视图标题)传递回“布局”视图。当然,这是合法的。对我可能造成的困惑感到抱歉。 - jeroenh

4

我曾经遇到同样的问题,但我尝试猜测现在应该使用什么,最终我使用了:

@Page.Title = "The title"

它可以工作,但我不确定现在的“最佳实践”是什么。

另外,我认为ViewBag就是以前所使用的ViewModel,而不仅仅是View。


0
我在这里添加一些内容,以防其他人遇到同样的问题。另一个可能的原因是找不到您的布局。我部署到IIS后(注释掉有问题的行),发现在Web部署期间未复制布局。在我的情况下,这是因为布局的构建操作已从Content更改为None。
编辑:实际上,我安装了MVC 3 RC。上述只是不同的症状。部署机器使用的是RTM,暴露了这个问题。正如awrigley所说,现在称为ViewBag。

谢谢,但在我的情况下问题是将属性重命名为ViewBag。 - awrigley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接