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

use*_*737 118 razor asp.net-mvc-3

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

@model xyz.abc.SomeClass
Run Code Online (Sandbox Code Playgroud)

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

有什么我想念的吗?

Ada*_*son 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>
Run Code Online (Sandbox Code Playgroud)

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

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

  • 确保在`MAIN` web.config文件中更新到最新版本(对于MVC 5)`<add key ="webpages:Version"value ="3.0.0.0"/>` (9认同)
  • 对我不起作用.或者,至少,有时候我得到intellisense,有时我没有,即使我在Views文件夹中的web.config中设置了所有这些. (3认同)

Pau*_*ett 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 - > Area.然后Visual Studio将负责正确设置区域.

  • +1 ...我刚注意到由于某种原因没有包含web.config,很高兴我找到了解决问题的答案 (2认同)
  • 我意识到这已经过时了,但我今天确实遇到了同样的问题,所以我想对这个答案表示感谢.:) (2认同)

Gre*_*man 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>
Run Code Online (Sandbox Code Playgroud)

这在您的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>
Run Code Online (Sandbox Code Playgroud)

这对我有用.我现在在非MVC项目中的视图上有智能感知和编译错误,然后我可以从多个MVC网站中引用它.


Jam*_*ruk 7

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


小智 7

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

<add key="webpages:Version" value="3.0.0.0" />
Run Code Online (Sandbox Code Playgroud)

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


pha*_*anf 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>
Run Code Online (Sandbox Code Playgroud)


Bor*_*att 5

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

@model MyModel
Run Code Online (Sandbox Code Playgroud)

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

@Html.Encode(Model.MyDisplayValue)
Run Code Online (Sandbox Code Playgroud)

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