我正在升级到MVC4。我已按照http://www.asp.net/whitepapers/mvc4-release-notes#_Toc303253806的说明进行操作,但在我的Razor视图和布局中,我遇到了错误,如
我也有错误:
当我将鼠标悬停在@Html上时,我可以看到它的类型是System.Web.WebPages.Html.HtmlHelper而不是System.Web.Mvc.HtmlHelper
不确定其他相关信息是什么,但这就是我所在的地方:
任何指示赞赏。
修改 web.config中的所有引用和文件都已升级到:
修改(2): 在我的/views/web.config(或/views/shared/web.config,如果我在下面尝试@Paul的解决方案)中,我有自己的基类型,它继承自System.Web.Mvc.WebViewPage,包含库中的引用已更新为MVC4并转到定义将我带到MVC4 dll。
新版本在此区域有任何变化吗?我在发行说明中看不到任何相关内容。
答案 0 :(得分:87)
我使用Web应用程序遇到了这个问题 - 当我需要.cshtml
时,我的System.Web.WebPages.WebViewPage
文件卡在System.Web.Mvc.WebViewPage
基类上。
首先,确保〜/ Views / web.config文件具有正确的pageBaseType
。就我而言,我设置为System.Web.Mvc.WebViewPage
。
<configuration>
<system.web.webPages.razor>
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<!-- ... -->
</pages>
</system.web.webPages.razor>
</configuration>
然后,重要,有些人发现这是关键,如果上面已经很好了:
.user
文件。 对于VS2015 ,.user
和.sln
文件已移至.vs
文件旁边创建的.sln
隐藏文件夹。但是,从下面的评论中,错误消息暗示我的工具完全使用了错误版本的MVC,删除此文件夹并不能解决问题。据我所知,还没有一个已知的解决方案。
答案 1 :(得分:25)
我在更新到MVC 5时遇到了同样的问题,并且通过更新Views文件夹中的web.config解决了这个问题。
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.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>
主持人 - &gt; factoryType设置为version:4.0.0.0 希望这对任何人都有帮助。
答案 2 :(得分:9)
我在这里尝试了所有的解决方案,但没有一个适合我。再一次,我的网站运行良好,但我没有智能感知,并且在我的视图中看到很多东西的红色波浪线,Visual Studio无法识别,其中一个是Html.BeginForm()
,以及任何有与ViewBag
。
我正在使用新的MVC 5项目。经过几个小时的比较web.config行,我终于找到了为我修复的内容。
我的root中的web.config有以下行:
<system.web>
<compilation debug="true" targetFramework="4.5" />
<!-- ... -->
</system.web>
我比较之前没有使用过MVC 5的项目,并且复制了一个块,我发现新版本中缺少了一个块,如下所示:
<system.web>
<compilation debug="true" targetFramework="4.5">
<assemblies>
<add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Helpers, Version=3.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=5.1.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</assemblies>
</compilation>
<!-- ... -->
</system.web>
我将上面的块复制到我的新项目的根目录中的web.config中,更改版本以匹配项目引用中找到的每个程序集的数字(右键单击提到的每个引用并选择&# 34;属性&#34;,&#34;版本&#34;在所选参考的属性窗口底部给出。
执行上述操作后,我现在有了智能感知功能,并且在Html.BeginForm
,ViewBag.Title
等内容下不会出现任何未知的红线。
答案 3 :(得分:6)
我已经运行了一个项目干净,并安装或重新安装了所有内容,并且仍然遇到很多Intellisense错误,即使我的网站正在编译并运行正常。当我更改Views文件夹中的web.config文件中的版本号时,Intellisense终于为我工作了。在我的情况下,我在Orchard中编写一个模块,它在MVC区域运行,但我认为这将有助于任何人使用最新版本的MVC。这是我在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.1.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="Orchard.Mvc.ViewEngines.Razor.WebViewPage">
<namespaces>
<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.Linq" />
<add namespace="System.Collections.Generic" />
</namespaces>
</pages>
</system.web.webPages.razor>
<system.web>
<!--
Enabling request validation in view pages would cause validation to occur
after the input has already been processed by the controller. By default
MVC performs request validation before a controller processes the input.
To change this behavior apply the ValidateInputAttribute to a
controller or action.
-->
<pages
validateRequest="false"
pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<controls>
<add assembly="System.Web.Mvc, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" 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>
答案 4 :(得分:4)
您需要将Views/Web.config
复制到/Shared
。这将告诉Razor使用MVC基本类型&amp;解析器。您可以在此处阅读更多内容:http://blog.slaks.net/2011/02/dissecting-razor-part-3-razor-and-mvc.html
答案 5 :(得分:3)
在从Visual Studio 2013
升级到Visual Studio 2015
后,我正在处理此问题。在尝试了此帖和其他类似SO帖子中发现的大部分建议后,我终于找到了问题。修复的第一部分是将我的所有NuGet
内容更新到最新版本(如果您遇到VS13
错误,可能需要在Nuget
中执行此操作),I您可能需要修复视图 Web.config
中列出的版本。这包括:
MVC
版本及其子库修复为新版本(展开References
,然后右键单击Sytem.Web.MVC
,然后Properties
以获取您的版本)Razor
版本。 <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.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=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<controls>
<add assembly="System.Web.Mvc, Version=5.2.3.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>
答案 6 :(得分:2)
Visual Studio 2017用户更新:
如果您刚刚迁移到Visual Studio 2017并且您的项目是MVC4,请确保返回到VS2017安装程序并检查“ASP.NET和Web开发”部分下的MVC4选项。它是一个可选组件,默认情况下不会选中。
这解决了我的问题
答案 7 :(得分:2)
在签约世界中,我经常使用使用较旧图像的机器。尝试了以上所有内容后,我决定将我的VS 2013更新到最新版本(Update 4)。 90分钟后重启,参考文件现在正常运行!希望这有帮助!
答案 8 :(得分:2)
对于那些在将项目从VS 2013迁移到VS 2015后遭受此困扰的人,我能够通过安装https://visualstudiogallery.msdn.microsoft.com/c94a02e9-f2e9-4bad-a952-a63a967e3935/file/77371/6/AspNet5.ENU.RC1_Update1.exe?SRC=VSIDE&UPDATE=TRUE的ASP.NET工具更新来解决此问题。
答案 9 :(得分:1)
为了扩展Matt DeKrey的答案,只需删除csproj.user文件(无需重新创建解决方案)就能解决我的问题。
我唯一的副作用是我需要将Start Action重置为使用特定页面。
答案 10 :(得分:1)
最近遇到了同样的问题,这就是我修复它的方法: 在Visual Studio中打开您的项目,转到:
它会加载你项目中缺少的东西,所有这些都应该回到正轨。
答案 11 :(得分:1)
我在MSDN上使用以下文章来解决这个问题(在本例中是从MVC 4到MVC 5)
文章的主要摘录是:
在运行时块中更新System.Web.Mvc到5.0.0.0,System.Web.Helpers到3.0.0.0和System.Web.WebPages到3.0.0.0
<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.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="5.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>
然后查找appsettings块并更新网页:版本值为3.0.0.0
<appSettings>
<add key="webpages:Version" value="3.0.0.0" />
</appSettings>
将主机factoryType块更新为System.Web.Mvc到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" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
</namespaces>
</pages>
</system.web.webPages.razor>
然后在页面块下更新对System.Web.Mvc的任何引用为5.0.0.0
<pages
validateRequest="false"
pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<controls>
<add assembly="System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
</controls>
</pages>
最后在配置块下更新System.Web对3.0.0.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>
答案 12 :(得分:0)
作为主题的变体,我可以上下誓言我的Views \ Web.config是正确的:
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
但实际上我需要引用Version=4.0.0.1
,而不是Version=4.0.0.0
因为安全更新被推迟了一段时间。
答案 13 :(得分:0)
是的,我一直试图解决这个问题。我已经在各种Stack Overflow主题中使用了所有关于此问题的解决方案,但似乎都没有。
我今天早上刚刚解决了这个问题。修复了项目和视图的web.config后,确保所有.dll版本与references文件夹中的版本匹配。您需要卸载项目,编辑.csproj,然后更新该文件中的所有.dll版本。
System.Web.Helpers
System.Web.Mvc
System.Web.WebPages
希望这有帮助,因为我终于解决了这个问题!没有更多的红色波浪线。
这也解决了我遇到的上下文菜单问题,我没有选择添加控制器,查看等。
答案 14 :(得分:0)
我的情况只发生在我创建了一个名为BaseViewPage
的自定义类后,它覆盖了WebViewPage
类。我最初将以下内容添加到 Main Web.confg文件中:
<pages pageBaseType="ZooResourceLibrary.Web.Support.BaseViewPage">
与查看文件夹web.config文件相同:
<pages pageBaseType="ZooResourceLibrary.Web.Support.BaseViewPage">
我尝试了很多其他的答案,但没有人能够让我继续我的BaseViewPage
课程。我修复它的方法是仅从 Main Web.config文件中删除pageBaseType
属性。将其保留在查看 web.config。
答案 15 :(得分:0)
我也遇到过这个具体问题;尝试使用剃刀标签时没有(或不正确)intellisense显示。我的具体问题是VS2015抱怨Html.BeginForm在当前环境中不存在。
我已经在我的MVC项目中设置了区域,并设法将我的错误原因缩小到特定区域的web.config文件,而不是全局web.config。
事实证明,对我来说这个问题的原因是我在web.config中为没有工作的区域添加了一个SQL connectionString,这(我假设)导致了解析错误,但是该项目编制正确。
将connectionString移动到全局web.config已纠正此问题。希望这对其他人有用。
答案 16 :(得分:0)
至于我,这是一个愚蠢的部署错误:Web项目可以有多个web.config。它正在开发人员的机器而不是生产中,但是我们没有意识到部署脚本只抓取了根目录下的Web.config
文件,并且它没有复制Web.config
文件在{ {1}}文件夹。
答案 17 :(得分:0)
*<system.web>
<compilation debug="true" targetFramework="4.5">
<assemblies>
<add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Helpers, Version=3.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=5.1.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</assemblies>
</compilation>*
缺少此配置,添加它并设置适当的程序集版本
答案 18 :(得分:0)
刚开始调查这个问题,这就是我的情况。如果您的Web配置中有正确的值,那么它只是MVC4中的一个错误。 http://connect.microsoft.com/VisualStudio/feedback/details/727729/viewbag-not-recognized-in-asp-net-mvc-4-project
答案 19 :(得分:-1)
对我来说,解决方案是改变以下内容:
<pages
validateRequest="false"
pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<controls>
<add assembly="System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
</controls>
</pages>