当前上下文中不存在名称“ ViewBag”-Visual Studio 2015


98

我再次开始在ASP.NET中进行开发,但在Visual Studio中遇到了一个小错误。使用一些剃刀功能时,我的.cshtml文件显示错误。例如“名称'ViewBag'在当前上下文中不存在”。这是一张图片:

Visual Studio 2015中问题的屏幕截图

我正在使用一个演示项目。您可以在这里找到该项目:https : //github.com/Wintellect/Angular-MVC-Cookbook/tree/master/BasicProject

我浏览了其他几个线程,大多数都建议更新web.config文件。这两个配置文件已经存在,并且因为它是一个非常流行的演示,所以我认为它具有所有必需的配置。我当然浏览了这些配置文件,它们确实包含建议的解决方案。

其他详情:

  • 我已经在解决方案上使用了clean&rebuild,但是并没有改变。
  • 当我创建一个全新的MVC项目时,它可以工作
  • 我的朋友有相同的问题,我们都使用VS 2015和Windows 10
  • 我仍然可以运行该应用程序,并且可以正常工作。

提前致谢。


当它仍然运行时,这只是后台编译器中的一个错误。尝试删除<Projectname> .suo文件。
Henk Holterman 2015年

您正在运行哪个项目?基本的?克鲁德,路由?
Prashant Ghimire

1
不幸的是,@ Henk无效。
Michjuh 2015年

@Prashant我已经尝试了基本项目和路由项目。这两个问题都发生了。
Michjuh 2015年

你解决了吗?我遇到了同样的问题@Michjuh
Burk

Answers:


124

尽管具有所有正确的配置,但我还是有此问题。

事实证明,这是组件缓存中的一些错误文件,从而阻止Razor视图识别ViewBag,Model和HtmlHelpers。删除这些文件可解决问题(下次打开Visual Studio时将创建这些文件的良好版本)。

文件位于此处:

%LOCALAPPDATA%\Microsoft\VisualStudio\14.0\ComponentModelCache

删除所有四个文件:

  • Microsoft.VisualStudio.Default.cache
  • Microsoft.VisualStudio.Default.catalogs
  • Microsoft.VisualStudio.Default.err
  • Microsoft.VisualStudio.Default.external

随后,我在其他几台开发人员机器上看到了相同的问题,此修复程序很快解决了该问题。


9
太好了,这为我解决了这个问题。我还发现删除临时ASP.NET文件也有帮助。C:\ Users \ your.name.here \ AppData \ Local \ Temp \ Temporary ASP.NET文件
Kevin

这也是我的解决方法。感谢您的发布!
Caverman '16

造成这种升级固定我的问题.NET 4至4.5.2升级MVC 3至5
乔·菲利普斯

我的问题是我的模型的属性未被识别。此修复程序立即解决了我的问题。
jkerak '16

5
我的文件夹是15.0_7e8de76c \ ComponentModelCache为VS 2017
凯文.NET

40

web.config在“视图”文件夹中的文件设置中更新版本号。

 <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

如果您通过nuget更新了MVC版本,则应为:

 <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

其他依赖版本也可能需要更新。Views for MVC助手和对象中的编译和名称空间问题通常与web.configView文件夹中混乱的文件有关。


9
尽管我必须输入5.2.0.0而不是5.2.2.0的版本,但是这对我有用。通过转到参考> System.Web.MVC并选择属性,可以查看所拥有的版本。感谢您的帮助
user2233949 2015年

@ user2233949,@Benjamin我正在使用MVC版本4.0.0.0,我可以从属性中看到它。我该如何解决?
Zeeshan

检查所有web.config文件,并确保所有文件都使用正确的主机版本。有时,当您覆盖了over视图文件夹中的设置时,问题可能会在没有得到纠正的情况下滑过。
本杰明·安德森

1
我尝试了所有其他建议,但该建议对我有用5.2.3.0。感谢本杰明
米奇

1
这对我来说是正确的答案。同时改变的web.config后,不要忘记关闭所有*.cshtml*.vbhtml文件,清洁和重新生成解决方案。VS 2019 16.1.2
斯捷潘Havránek

22

在应用程序设置中找到“ webpages:Version”,并将其更新为版本3.0.0.0。我的web.config有

<add key="webpages:Version" value="2.0.0.0" />

我将其更新为

<add key=”webpages:Version value=”3.0.0.0 />

1
我删除了两行(webpages.Version,webpages.Enabled),并且在MVC 5.2中似乎工作正常
Grappachu

这应该在两个版本的Web.config,项目根目录以及任何区域的Web.configs中进行更新。
索努K

谢谢。就我而言,有问题的标记位于<configuration>-<configSections>-<sectionGroup name =“ system.web.webPages.razor”>下,我需要更改<sectionGroup name =“ system.web.webPages.razor”>, <section name =“ host”>和<section name =“ pages”>使用版本= 3.0.0.0

删除任何地方(包括Temporary ASP.NET Files)的缓存都无济于事,但这答案确实有帮助。
wha7ever

此设置甚至意味着什么?它对应什么?如何确定您的应用程序所依赖的版本?
jpmc26

18

我不小心web.configViews文件夹中删除了,以为没有必要。当我放回去时,它开始工作。


13

在阳光下乱投医后,原来的东西已经修改了我System.Web.WebPages.Razor <sectionGroup>/Views/Web.Config从正确的驼峰System.Web.WebPages.Razor到全小写system.web.webpages.razor最终是我的死亡。

希望这可以帮助其他可怜的人解决这个问题。

供参考,这是正确的条目(针对我的情况)

<sectionGroup name="System.Web.WebPages.Razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> 

3
我的都是小写字母,但没有解决我的问题。
Paul Totzke '16

鲤鱼。这也是我的灭亡。我不敢相信你发现了这个,@ jbwedtech。
路加·普普利特

我也用小写字母写这些,改变大小写并不能解决问题。
安迪·布朗

5

有时仅更改web.config设置中的版本号是不够的。发生此问题的原因是Visual Studio 2015没有mvc4工具。

解决方案是将您的项目升级到MVC5。这完全可以解决问题。您可以从此页面获得帮助。它清楚地解释了这一点。

http://www.asp.net/mvc/overview/releases/how-to-upgrade-an-aspnet-mvc-4-and-web-api-project-to-aspnet-mvc-5-and-web- api-2

通过Visual Studio团队声明的方式,他们将在第一次更新时向Visual Studio 2015添加mvc4支持。


5

我多次面对这个问题,最后我发现它发生了,因为视图文件夹应该包含它是自己的Web配置


2
但是该web.config应该是什么?它不应该自动生成吗?(更新)找到了它应该拥有的以及如何生成stackoverflow.com/questions/29305914/…–
drzaus

是的,您是对的,在我的项目中,Web.Config较早不存在(是的,它应该自动生成,但是从以前的开发人员那里接过一个项目,不确定为什么要删除它)。在为Views文件夹添加Web.Config文件后,它可以工作。
user3559462

2

到了游戏后期,但是这些解决方案都不适合我。

我升级到VS 2017,该站点正常运行,但是Visual Studio编译器破坏了大多数.cshtml文件

TLDR;

mysolution.sln版本错误

差异

因此,您想使用更新的VS创建一个新的解决方案,并将其与您的VS进行比较,然后复制版本信息。

完整的升级步骤:

  1. 确保.sln文件具有VS的正确版本
  2. 右键单击VS中的MySolution> Nuget Manager>更新>运行所有更新
  3. 右键单击VS中的MySolution>应用程序>更新目标框架(在我的情况下为4.5.2)
  4. 修复.config文件中的所有版本问题(即RAZOR到3.0.0.0)
  5. 修复编译器中的所有代码问题(对我而言,ForEach模棱两可)

我的项目是从VS2013开始的,当我打VS2017时,我开始看到这些错误,但是一切都编译正常,因此我试图弄清楚发生了什么,但不太难。由于打开视图而引起大量错误,这已成为一个问题。我现在在VS2019上,偶然发现了您的修复程序; 你摇滚!我的.sln为14.0.25123.0,应为16.3.9。我还修复了框架的所有版本问题。我不必(非常感谢)更新nuget软件包,因为我没有时间完全测试所有更新。
DaBlue

1

我已经在一个工作日上浪费了很多时间。我尝试了此(和其他)帖子中的所有内容,但均无济于事。最终,我发现我需要以其他方式打开项目。我刚刚将现有网站升级到Visual Studio 2015,MVC5,.NET Framework 4.5.2,并且正在使用Windows 10,但是怀疑答案对于每个软件应用程序的其他版本来说都是一样的。

这是我选择打开网站的菜单选项:

在此处输入图片说明

取而代之的是,我使用以下菜单选项打开了定义项目的csproj文件:

在此处输入图片说明

然后,我有许多其他人提到的“干净解决方案”选项:

在此处输入图片说明

但是,我什至不需要它-一切都正常!好吧,无论如何,我继续着下一组问题...


1

我添加了控制器

  • 步骤1:添加>类
  • 步骤2:UserController

创建相应的代码:

namespace SampleApp.Controllers
{
    public class UserController {
    }
}

我的错误通过将步骤1更改为:

  • 第1步:添加>控制器
  • 步骤2:使用者控制器

创建相应的代码:

namespace SampleApp.Controller {
    public class UserController : Controller {
    }
}

问题是: 我没有从Controller继承我的班级

我的错误中还包含其他消息-所有这些消息均来自此问题:

错误CS0117:“ ModelState”不包含“ IsValid”的定义

错误CS0103:名称“ RedirectToAction”在当前上下文中不存在

错误CS0103:名称“视图”在当前上下文中不存在

错误CS0103:名称“ ViewBag”在当前上下文中不存在

错误CS0103:名称“ Json”在当前上下文中不存在

希望此更改对那些在最初步骤中没有引起注意的人有所帮助。


1

在尝试了该主题(和其他主题)的每个解决方案/技巧的至少90%之后,我终于解决了!!剧透警报,以下所谓的“解决方案”没有逻辑痕迹:在关闭所有选项卡的情况下运行解决方案终于可以了,如果没有其他办法可以避免我“当前上下文中不存在ViewBag&Co” ...您已经被警告过,没有奇怪的逻辑!

希望有一天能对某人有所帮助^^


1

就我而言,只有一个项目在我的PC上才发生此问题。我的项目在VS2012中工作正常,但是在VS2017中打开时出现了此问题。

对我来说,这里的主要问题是缓存。我的项目指向的是Razor和MVC的dll的较早缓存版本,并且未找到较新版本(例如ViewBag)中添加的功能。ViewBag是在Razor版本3中添加的,但是因为我缓存了Razor版本2,所以它找不到ViewBag(但是它可以找到版本2中存在的其他内容)。但是,仅像接受的答案那样清除缓存并不能解决我的问题。对于Razor,我们必须更改配置文件以说“使用版本3而不是2”,对于MVC使用“使用版本5而不是4”,然后关闭VS,删除缓存,并打开项目并重建。然后事情就解决了。以下是更详细的说明。

以下是有助于我解决问题的更改顺序:

  1. 在“视图”文件夹的Web.config中,将所有位置更改为
    • MVC版本设置为4.0.0.0至5.0.0.0
    • 剃刀版本设置为2.0.0.0至3.0.0.0

这是我的情况:

<sectionGroup name="system.web.webPages.razor" type="... Version=3.0.0.0 ...">
    <section name="host" type="... Version=3.0.0.0 ..." .../>
    <section name="pages" type="... Version=3.0.0.0 ..." .../>
</sectionGroup>
...
<host factoryType="... System.Web.Mvc, Version=5.0.0.0 ..." />
...
<pages
    ...
    pageParserFilterType="... Version=5.0.0.0 ..."
    pageBaseType="... Version=5.0.0.0 ..."
    userControlBaseType="... Version=5.0.0.0 ...">
    <controls>
        <add assembly="... Version=5.0.0.0 ..." ... />
    </controls>
</pages>

(注:1)您的版本可能有所不同,我只是在说我的情况2)为简洁起见,我省略了一些带有“ ...”的内容3)即使您拥有5.3.2.0之类的MVC版本您仍应输入与Razor版本相同的5.0.0.0-在3.0.0.0中输入全零)

  1. 在主配置文件(位于顶层的文件)中,webPages:version从2.0.0.0 更改为3.0.0.0。

  2. 此更改可能不会影响解决方案,但我仍会提及。确保“ Views”文件夹的<namespaces>部分与项目根目录中的主.conifg文件具有完全相同的内容,例如:

<namespaces>
    <add namespace="System.Web.Helpers" />
    <add namespace="System.Web.Mvc" />
    <add namespace="System.Web.Mvc.Ajax" />
    <add namespace="System.Web.Mvc.Html" />
    <add namespace="System.Web.Optimization" />
    <add namespace="System.Web.Routing" />
    <add namespace="System.Web.WebPages" />
</namespaces>
  1. 最后,关闭VS。删除%LOCALAPPDATA%\Microsoft\VisualStudio\14.0\ComponentModelCacheFenton接受的答案(或当前正确的路径)中的所有缓存文件(或任何正确的路径)。.scan即使该答案中未提及,也请删除文件。完成后,打开VS,清理项目并重建。事情应该被现在的工作。它为我工作。


0

通过将以下内容添加到我的.cshtml页面顶部,可以解决此问题

@{ViewBag.Title = "Title";}

重新编译后,我能够删除此行,并且错误消失了。




0

我遇到了同样的问题。我尝试了“清理,构建和重建”解决方案,但对我没有用。

所以最后我做了如下:

  1. Windows键+ R
  2. 输入%temp%
  3. 按下Enter
  4. 删除所有文件(如果未删除的文件很少,则没有问题)

希望它也对你们有用。


0

将我的客户的一个应用程序从ASP MVC 4升级到ASP MVC 5后,我们在cshtml页面中遇到了与HTML Helper和ViewBag相关的设计器错误。

若要解决这些问题,请确保您执行以下操作: 从Nuget安装Asp.NET Web Helpers库 打开项目的Web.config并更新绑定(例如在安装Nuget软件包时未更新)。

<dependentAssembly>
  <assemblyIdentity name=”System.Web.Mvc publicKeyToken=”31bf3856ad364e35 />
  <bindingRedirect oldVersion=”0.0.0.0-5.2.2.0 newVersion=”5.2.2.0 />
</dependentAssembly>

在应用程序设置中找到“ webpages:Version”,并将其更新为版本3.0.0.0。我的web.config有

我将其更新为

重新启动Visual Studio并重建。您可能需要删除项目的bin文件夹

访问此网址https : //lajak.wordpress.com/2014/11/16/asp-mvc-5-viewbag-does-not-exist-in-the-current-context/


-1

尝试了所有其他方法后,感到有些沮丧,我将MVC5应用程序上的.NET框架从4.5升级到4.5.2。不知何故,它解决了我的问题。希望能帮助到你。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.