6

我有一个MVC 5应用程序,由空模板制成。我已经通过的NuGet添加Microsoft.AspNet.Mvc,我的包文件看起来像这样:Visual Studio无法解析模型,但剃刀页加载

<packages> 
    <package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net46" /> 
    <package id="Microsoft.AspNet.Razor" version="3.2.3" targetFramework="net46" /> 
    <package id="Microsoft.AspNet.WebPages" version="3.2.3" targetFramework="net46" /> 
    <package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.0" targetFramework="net46" /> 
    <package id="Microsoft.Net.Compilers" version="1.0.0" targetFramework="net46" developmentDependency="true" /> 
    <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net46" /> 
</packages> 

我有一个声明了一个模型@model IEnumerable<Models.ToDoModel>,并用它在foreach循环剃刀页。

@model IEnumerable<Models.ToDoModel> 

<!DOCTYPE html> 

    <html> 
    <head> 
     <meta name="viewport" content="width=device-width" /> 
     <title>Home</title> 
    </head> 
    <body> 
    <h1>Hello World!</h1> 
    <ul> 
     @foreach (var item in Model) 
     { 
      <li>ID: @item.Id</li> 
     } 
    </ul> 
    </body> 
</html> 

当我运行的页面,它呈现正常,但是Visual Studio中坚持说,有一个错误:

cannot resolve symbol 'model'

它不会承认model关键字或给我任何智能感知。

Web.Config看起来像这样:

<?xml version="1.0" encoding="utf-8"?> 
<!-- 
    For more information on how to configure your ASP.NET application, please visit 
    http://go.microsoft.com/fwlink/?LinkId=169433 
    --> 
<configuration> 

    <system.web> 
    <compilation debug="true" targetFramework="4.6"/> 
    <httpRuntime targetFramework="4.6"/> 
    </system.web> 
    <system.codedom> 
    <compilers> 
     <compiler language="c#;cs;csharp" extension=".cs" 
     type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
     warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"/> 
     <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" 
     type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
     warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+"/> 
    </compilers> 
    </system.codedom> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35"/> 
     <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35"/> 
     <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/> 
     <bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0"/> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
</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=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> 
     <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> 
     <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.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=5.2.3.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.webServer> 
    <handlers> 
     <remove name="BlockViewHandler"/> 
     <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" /> 
    </handlers> 
    </system.webServer> 
</configuration> 
+0

你试过关闭并重新打开VS? – DavidG

+0

@DavidG我有,但是,我有其他Visual Studio的实例打开。关闭他们*全部*工作! – BanksySan

+0

在这种情况下,问题解决了! – DavidG

回答

3

你web.configs看起来都很好。 Visual Studio经常会对这样的事情感到困惑。我的建议是关闭Visual Studio并重新打开它。此外,正如您发现的,关闭全部可能需要打开VS实例。

3

关闭Visual Studio的所有实例都适合您,非常棒。

我定期得到这个症状,但我使用ReSharper的,并修复它,我必须

  • 进入ReSharper的选项“清除缓存”,
  • ,然后关闭并重新打开 的Visual Studio
+1

你不需要反弹Visual Studio,你可以去Options/resharper并点击暂停按钮,然后继续。同样的效果。 – osoviejo

1

我遇到过这个问题,并试着在阳光下的每个解决方案。一周后,我尝试编辑web配置(在视图和根目录中),重新加载项目,清除resharper缓存..你的名字,我试过了。 我加载了一个旧的项目,并在“布局”和“模型”部分悬停以查看他们需要的名称空间。经仔细检查,所需的命名空间已从我的项目中删除。我不知道如何 - 我最近进行了升级..无论如何 - 我从解决方案文件夹System.Web.Mvc和另一个引用这2个文件,重建,它的工作。我可以当场跳舞。希望这可以帮助某个人!

12

如果你有resharper,挂起它会修正,即:Tool - Options - Resharper - Suspend