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

我在一个项目中添加了一个 cshtml 页面。当我试图向它添加以下声明时,我得到一个错误: “名称‘ model’在当前上下文中不存在”。

@model xyz.abc.SomeClass

我查了参考资料,所有的都到位了。我在 view 文件夹中添加了一个 web.config,但是没有修复它。

有什么我不知道的吗?

110823 次浏览

Update: If you are using a newer version of MVC, the same process applies, just be sure to use the correct version number in the web.config's <host> line.

我发现自己也经历了和你一样的事情,经过进一步的研究,我发现了问题所在!

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

  <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>

我建议您创建一个新的 MVC3项目,然后将为您创建的 web.config 复制到 views 文件夹中。

重要 一旦你做了这些,你需要关闭文件并重新打开它!

当我创建一个新的区域来组织页面时,也遇到了同样的问题。我的结构是这样的:

WebProject

- [] Areas
- [] NewArea
- [] Controllers
- [] Views
- [] Controllers
- [] Views
- Web.config
- Web.config

The views created in the Views folder under the WebProject worked fine, but the views created under the NewArea threw the following error:

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

为了解决这个问题,我将 WebProject 下面的视图文件夹中的 web.config 复制到 NewArea 中的视图文件夹中。请看下面。

WebProject

- [] Areas
- [] NewArea
- [] Controllers
- [] Views
- **Web.config**
- [] Controllers
- [] Views
- Web.config
- Web.config

我遇到这个问题是因为我使用 Add-> New Folder 手动创建了这个新区域来添加文件夹。我应该右键单击项目并选择 Add-> Area。然后 VisualStudio 将负责正确设置该区域。

当您在视图顶部声明模型时,使用如下代码:

@model MyModel

you need to capitalise your references to it below, for example:

@Html.Encode(Model.MyDisplayValue)

我认为在视图文件夹中缺少 web.config 是主要原因,但是如果这个问题已经解决并且问题仍然存在,请检查您使用的是 模特,而不是 模特在源代码中引用它。

当我无意中在根目录中拥有路由/about 的视图文件(About.cshtml)的副本时,我遇到了这个问题。(不是视图文件夹)一旦我将文件移出根目录,问题就解决了。

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

  1. 我的一个视图文件夹不小心移动到了项目的根目录 在 project_root/Views/SignUp/ViewName之前进行 project_root/SignUp/ViewName匹配。这导致了 @model错误。

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

我希望这能帮到别人。我花了好几个小时才相信这个问题是由我们最近从 MVC 3升级到 MVC 4造成的。请注意: 升级问题应该只发生在 MVC2和 MVC3之间。如果您在以后的版本中看到这个问题,可能不是由于升级造成的。

如果您的视图位于类库程序集中,这对于在项目之间重用共享视图很有用,那么仅仅按照 Adam 的建议做可能是不够的。即使这样,我还是有问题。

在项目的根目录下的 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>

这招对我很管用。我现在有智慧和没有编译错误,我的意见在一个非 MVC 项目,我可以参考从多个 MVC 网站。

我花了很长时间来解决这个问题,但最后我希望我已经在 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

Because I have Razor in 系统,网络,剃刀, so I changed the razor namespace to System.Web.Razor.

把它添加到 web.config 中

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

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

找到 ProjectTypeGuids 元素并用{ E3E379DF-F4C6-4180-9B81-6769533ABE47}替换{ E53F8FEA-EAE0-44A6-8774-FFD645390401}。

仅此而已。

还有一个原因。在我的例子中,我将 index.cshtml 文件复制到 web 根文件夹(在视图文件夹之外)作为远程服务器的备份。

所以,我一直在修改我的/views/web.config,一直在修改我的/views/home/index.cshtml,错误一直在发生... ... 直到发现/index.cshtml 在 views 文件夹之外,删除了它,当然,一切都恢复正常了!

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

My coworker suggested checking for updates for VS2013. After I installed the VS2013更新1, I stopped getting this error.

Update: 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>

在使用 VS2012和 VS2013时遇到了类似的问题。
在主 web.config 中向 < appSettings > 添加以下行可以工作:

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

如果行已经存在,但是说2.0.0.0,将其更改为3.0.0.0就可以了。

检查视图目录中的配置文件 添加 MVC 4/5的密钥

重新安装那玩意儿解决了我的问题

PM > 安装软件包 Microsoft. AspNet. Razor-Version 3.2.3

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

Be sure you have Web.config files in your View at 遥远. Maybe you skipped to upload it by your Ftp programme's filters.

对我来说,这就是问题所在,整个街区都不见了。

  <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 关键字的红色底层并没有消失。后来,找到了解决方案: 只需从我的项目的目录和重建 已删除的“软件包”文件夹,同时允许 NuGet 恢复丢失的软件包。刷新,然后就搞定了!

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

我也面临同样的问题,然后我找到了解决办法,解决办法是:

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

The 。所以 file is a hidden file in the same folder where the .svn solution file exists. Hope, it'll work!

我没有在 Area/MyArea/Views/web.config 下面添加 web.config。添加后工作得很好。这是在 MVC 5和.NET4.5中添加的

关闭 VisualStudio 和重新打开对我来说很有用。一定是个奇怪的错误。