我最近将一个 ASP.NET MVC 项目从 v3 更新到 v4,现在我的 .cshtml Razor View 在 Visual Studio 中编辑时失去了智能感知。关键字和辅助属性,例如@model、@Url、@Html 等,在 VS 中无法识别并产生错误。运行时,应用程序本身运行良好。
我已经尝试了来自各种在线资源的建议解决方案,包括 SO,其中大部分涉及对 web.config 的调整。我已经完成了它们并且我很确定我的配置设置对于 MVC 4 是正确的:
<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.Optimization"/>
<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>
现在,我已经做了一些观察,这让我知道问题可能出在哪里。如果我浏览我的 web.config 并恢复对 MVC 3 的引用,即 MVC 从 4.0 版恢复到 3.0,并将 Razor/WebPages 从 2.0 恢复到 1.0,我的 View 智能感知回来了(但显然这让我的应用程序无法运行)。
我想我可能有安装问题,而且无论出于何种原因,Visual Studio 都无法找到 web.config 中指定的程序集以用于 Razor 智能感知。我通过 NuGet 安装了 ASP.NET MVC 4 引用,并且我已经仔细检查了我引用的所有程序集都是正确的版本。我试过重新安装 MVC 包,我试过多次清理和重建。
预先感谢您提供有关如何使其工作的任何建议。目前这确实阻碍了我的工作效率。
最佳答案
我认为您需要 System.Web.Helpers 命名空间,可能还需要 System.Web.WebPages:
改变这个:
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Optimization"/>
<add namespace="System.Web.Routing" />
</namespaces>
到:
<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.Optimization"/>
<add namespace="System.Web.Routing" />
<add namespace="System.Web.WebPages" />
</namespaces>
关于asp.net-mvc - ASP.NET MVC 4 项目 - Razor 智能感知已丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23397644/