MVC3中的当前上下文中不存在名称“模型”

我在一个项目中添加了一个cshtml页面。 当我尝试添加以下声明时,出现错误:“名称模型”在当前上下文中不存在“。

@model xyz.abc.SomeClass 

我检查了参考文献,所有这些都已经到位。 我在视图文件夹中添加了一个web.config,但没有解决它。

有什么我失踪?

更新:如果您使用的是较新版本的MVC,则应用相同的过程,只要确保在web.config的<host>行中使用正确的版本号即可。

那么,我发现自己也经历了同样的事情,经过一番进一步的研究,我发现了什么问题呢!

您需要为Views文件夹包含默认的MVC3 web.config。 MVC3有两个:一个在你的应用程序的根目录下,一个在views目录下。 这包含一个包含命名空间的部分。 确保你的看起来像这样:

  <system.web.webPages.razor> <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <pages pageBaseType="System.Web.Mvc.WebViewPage"> <namespaces> <add namespace="System.Web.Mvc" /> <add namespace="System.Web.Mvc.Ajax" /> <add namespace="System.Web.Mvc.Html" /> <add namespace="System.Web.Routing" /> </namespaces> </pages> </system.web.webPages.razor> 

我build议你创build一个新的MVC3项目,然后把你创build的web.config复制到你的views文件夹中。

重要一旦你这样做了,你需要closures文件并重新打开它。 瞧! 智能感知!

当我创build一个新的区域来组织我的页面时,我遇到了同样的问题。 我的结构看起来有点像:

WebProject

  • []区域
    • NewArea
      • []控制器
      • []意见
  • []控制器
  • []意见
    • Web.config文件
  • Web.config文件

在WebProject下的Views文件夹中创build的视图工作正常,但在NewArea下创build的视图抛出了以下错误:“名称'模型'在当前上下文中不存在”。 为了解决这个问题,我将WebProject下的Views文件夹中的web.config复制到了NewArea中的Views文件夹中。 见下文。

WebProject

  • []区域
    • NewArea
      • []控制器
      • []意见
        • Web.config文件
  • []控制器
  • []意见
    • Web.config文件
  • Web.config文件

我碰到这个,因为我手动创build这个新的领域使用添加 – >新build文件夹来添加文件夹。 我应该右键单击该项目并select添加 – >区域。 然后Visual Studio会照顾正确地设置区域。

如果你的观点是在一个类库组件中,这对于在项目之间重复使用共享视图是有用的,那么只是做亚当build议可能是不够的。 即使如此,我仍然有问题。

在你的项目的根目录下的web.config中试试这个:

 <?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> </sectionGroup> </configSections> <system.web.webPages.razor> <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <pages pageBaseType="System.Web.Mvc.WebViewPage"> <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.Routing" /> <add namespace="System.Web.WebPages" /> </namespaces> </pages> </system.web.webPages.razor> <appSettings> <add key="webpages:Version" value="2.0.0.0" /> <add key="webpages:Enabled" value="false" /> <add key="PreserveLoginUrl" value="true" /> <add key="ClientValidationEnabled" value="true" /> <add key="UnobtrusiveJavaScriptEnabled" value="true" /> </appSettings> <system.web> <compilation debug="true" targetFramework="4.0"> <assemblies> <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <add assembly="System.Web.Helpers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <add assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/> </assemblies> </compilation> <pages> <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.Routing" /> <add namespace="System.Web.WebPages" /> </namespaces> </pages> </system.web> <system.webServer> <validation validateIntegratedModeConfiguration="false" /> <modules runAllManagedModulesForAllRequests="true" /> <handlers> <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" /> <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" /> <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /> <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" /> <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> </handlers> </system.webServer> </configuration> 

而这个在您的视图文件夹中的web.config:

 <?xml version="1.0"?> <configuration> <configSections> <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> </sectionGroup> </configSections> <system.web.webPages.razor> <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <pages pageBaseType="System.Web.Mvc.WebViewPage"> <namespaces> <add namespace="System.Web.Mvc" /> <add namespace="System.Web.Mvc.Ajax" /> <add namespace="System.Web.Mvc.Html" /> <add namespace="System.Web.Routing" /> </namespaces> </pages> </system.web.webPages.razor> <appSettings> <add key="webpages:Enabled" value="false" /> </appSettings> <system.web> <httpHandlers> <add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/> </httpHandlers> <pages validateRequest="false" pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> <controls> <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" /> </controls> </pages> </system.web> <system.webServer> <validation validateIntegratedModeConfiguration="false" /> <handlers> <remove name="BlockViewHandler"/> <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" /> </handlers> </system.webServer> </configuration> 

这对我有效。 我现在有一个intellisense和我的意见在非MVC项目,我可以参考多个MVC网站没有编译错误。

我遇到了这个问题,当我无意中有一个根目录中的path/ about的视图文件(About.cshtml)的副本。 (不是视图文件夹)一旦我将文件从根目录移出,问题就消失了。

有类似的问题使用VS2012和VS2013。
将以下行添加到主web.config中的<appSettings>工作:

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

如果该行已经存在,但说2.0.0.0,更改为3.0.0.0工作。

更新:5/5/2015对于您的MVC 5项目,您需要在/views/web.config中将Version设置为5.0.0.0

 <system.web.webPages.razor> <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> </system.web.webPages.razor> 

当你使用这样的代码在视图的顶部声明模型:

 @model MyModel 

你需要在下面引用你的引用,例如:

 @Html.Encode(Model.MyDisplayValue) 

我相信在Views文件夹中缺lessweb.config将是造成这种情况的主要原因,但是如果解决了问题,并且问题仍然存在,请检查您使用的是模型 ,而不是模型在源代码中引用它。

我也遇到了这个问题。 我的情况有点不同。

  1. 我的一个视图文件夹被意外地移动到我的项目的根目录。 这导致project_root/Views/SignUp/ViewName之前的pathproject_root/SignUp/ViewName匹配。 这导致@model错误。

  2. 将视图移回到适当的位置后,该目录以某种方式在项目根目录中重新创build。 这次空了。 /SignUp/ViewName工作,但/SignUp/扔了403 - Forbidden: Access is denied. 错误。 整个文件夹必须从项目根目录中删除。

我希望这可以帮助别人。 我花了数小时的时间认为这个问题是由于我们最近从MVC 3升级到MVC 4造成的。 只需要注意:升级问题应该只发生在MVC 2和MVC 3之间。如果在后续版本中看到这个问题,可能不是由于升级。

花了我很长时间来解决这个问题,但最后我希望我已经解决了它的MVC,这是类似的:

我已经重新安装ASP.NET 4.5( http://www.asp.net/downloads

我已经按照http://www.asp.net/whitepapers/mvc4-release-notes上的升级教程;

但这个段落对我来说是错误的

 System.Web.Mvc, Version=4.0.0.0 System.Web.WebPages, Version=2.0.0.0 System.Web.Helpers, Version=2.0.0.0 System.Web.WebPages.Razor, Version=2.0.0.0 

因为我在System.Web.Razor中有Razor,所以我将剃刀命名空间改为System.Web.Razor。

将此添加到您的web.config

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

我已经添加到上述所有这些程序集的程序集引用

findProjectTypeGuids元素并用{E3E379DF-F4C6-4180-9B81-6769533ABE47}replace{E53F8FEA-EAE0-44A6-8774-FFD645390401}。

就这些。

这是一个可怕的错误,但是:

确保在远程 查看中有Web.config文件。 也许你跳过了上传它的Ftp程序的filter。

还有另一个原因。 在我的情况下,我已经从远程服务器备份一个index.cshtml文件到web根文件夹(在Views文件夹之外)作为备份。

所以,我一直在改变我的/views/web.config,不断改变我的/ views/home/index.cshtml和错误不断发生…直到find/index.cshtml观点文件夹外,删除它,当然,它一切恢复正常!

我遇到了同样的问题,但在我的情况下,唯一改变的是,我卸载了Visual Studio 2012,并安装了Visual Studio 2013.我打开了我们的解决scheme,但我一直得到相同The name 'model' does not exist in current context每个Razor视图The name 'model' does not exist in current context错误中。

我的同事build议检查VS2013的更新。 在我安装了VS2013 Update 1之后 ,我停止了这个错误。

检查你的configuration文件的视图目录。 在添加MVC 4/5的密钥

重新安装nuget为我解决了它

PM> Install-Package Microsoft.AspNet.Razor -Version 3.2.3

对我来说这是个问题。 整个街区都没有。

  <assemblies> <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <add assembly="System.Web.Helpers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <add assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/> </assemblies> 

更新软件包后,我遇到了同样的问题。 我已经完成了本主题上面所写的全部内容,但model关键字的红色底层并没有消失。 后来发现解决办法:刚从我的项目目录中删除了'package'文件夹并重build,同时允许NuGet恢复丢失的包。 刷新,它完成了!

检查你的web.config文件应该存在于已发布的文件中

我面临着同样的问题,然后我find了一个解决scheme。 解决scheme是:

  1. closuresVisual Studio
  2. 删除SUO文件
  3. 重新启动Visual Studio

.suo文件是.svn解决scheme文件所在的同一文件夹中的隐藏文件。 希望,它会工作!