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

时间:2011-06-17 16:48:32

标签: asp.net-mvc-3 razor

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

@model xyz.abc.SomeClass

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

我有什么遗失的吗?

20 个答案:

答案 0 :(得分:238)

更新:如果您使用的是较新版本的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>

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

重要完成后,您需要关闭该文件并重新打开。瞧!智能感知!

答案 1 :(得分:29)

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

WebProject

  • []地区
    • [] NewArea
      • []控制器
      • []观看次数
  • []控制器
  • []观点
    • 的Web.config
  • 的Web.config

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

WebProject

  • []地区
    • [] NewArea
      • []控制器
      • []观点
        • 的Web.config
  • []控制器
  • []观点
    • 的Web.config
  • 的Web.config

我遇到了这个,因为我使用Add - &gt;手动创建了这个新区域。用于添加文件夹的新文件夹。我应该右键单击该项目并选择Add - &gt;区域。然后,Visual Studio将负责正确设置区域。

答案 2 :(得分:11)

如果您的视图位于类库程序集中,这对于在项目之间重用共享视图很有用,那么仅仅执行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>

这在您的views文件夹中的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网站中引用。

答案 3 :(得分:7)

使用VS2012和VS2013时遇到类似问题。
将以下行添加到&lt; appSettings&gt;在主web.config工作:

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

如果该行已经存在但是说2.0.0.0,则将其更改为3.0.0.0。

答案 4 :(得分:7)

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

答案 5 :(得分:6)

更新:2015年5月5日 对于MVC 5项目,您需要在/views/web.config

中将版本设置为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>

答案 6 :(得分:5)

使用以下代码在视图顶部声明模型:

@model MyModel

您需要在下面对您的引用进行大写,例如:

@Html.Encode(Model.MyDisplayValue)

我相信Views文件夹中缺少web.config是导致此问题的主要原因,但如果修复后问题仍然存在,请检查您是否使用模型,而不是模型在源代码中引用它。

答案 7 :(得分:3)

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

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

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

  3. 我希望这有助于某人。我花了几个小时相信这个问题是由我们最近从MVC 3升级到MVC 4引起的。只是注意:升级问题应该只发生在MVC 2和MVC 3之间。如果你在以后的版本中看到这个问题,它可能不是由于升级。

答案 8 :(得分:2)

我花了很长时间来解决这个问题,但最后我希望我已经在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,所以我将razor名称空间更改为System.Web.Razor。

将此添加到您的web.config

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

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

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

就是这样。

答案 9 :(得分:2)

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

请确保远程查看中包含 Web.config 文件。也许你跳过了你的Ftp程序过滤器上传它。

答案 10 :(得分:1)

我在Areas / MyArea / Views / web.config下缺少web.config。一旦添加它工作正常。这是使用MVC 5和.NET4.5

答案 11 :(得分:0)

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

所以,我一直在改变我的/views/web.config,不断更改我的/views/home/index.cshtml并且错误一直发生......直到找到了views文件夹外的/index.cshtml,删除了它当然,这一切都恢复了正常!

答案 12 :(得分:0)

我遇到了同样的问题,但在我的情况下,唯一改变的是我卸载了Visual Studio 2012并安装了Visual Studio 2013.我打开了我们的解决方案,但我保持不变{{1每个Razor视图中都有错误。

我的同事建议检查VS2013的更新。安装 VS2013 Update 1 后,我停止了此错误。

答案 13 :(得分:0)

检查views目录中的配置文件。在里面 添加MVC 4/5的密钥

答案 14 :(得分:0)

重新安装nuget解决了它

PM&GT;安装包Microsoft.AspNet.Razor -Version 3.2.3

答案 15 :(得分: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>

答案 16 :(得分:0)

更新软件包后,我遇到了同样的问题。我完成了你在本主题上面写过的所有内容,但是模型关键字的红色底层并没有消失。后来找到解决方案:只需删除&#39;包&#39;文件夹来自我的项目的目录并重建,同时允许NuGet恢复丢失的包。精神焕发,已经完成了!

答案 17 :(得分:0)

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

答案 18 :(得分:0)

我遇到了同样的问题然后找到了解决方案。解决方案是:

  
      
  1. 关闭Visual Studio
  2.   
  3. 删除SUO文件
  4.   
  5. 重新启动Visual Studio
  6.   

.suo 文件是存在 .svn 解决方案文件的同一文件夹中的隐藏文件。希望,它会起作用!

答案 19 :(得分:0)

关闭Visual Studio并重新打开对我有用。必须是一个奇怪的错误。