我在升级到MVC4的过程。 我按照指示在http://www.asp.net/whitepapers/mvc4-release-notes#_Toc303253806但在我的剃刀视图和布局,我有这样的错误
- “System.Web.WebPages.Html.HtmlHelper”不包含关于“BeginRouteForm”和没有扩展方法“BeginRouteForm”接受类型“System.Web.WebPages.Html.HtmlHelper”的第一个参数的定义可以发现(你缺少using指令或程序集引用?)
我也有这样的错误:
当我将鼠标悬停在@Html我可以看到它的类型是System.Web.WebPages.Html.HtmlHelper不System.Web.Mvc.HtmlHelper
真的不知道还有什么其他的信息相关,但我这是在哪里:
- 我还没有更新类图书馆的等等。在SLN到.NET 4.5呢。
- 该项目于VS2010创建的,但我做在VS2012迁移
- 该项目打开并运行与VS2012,.NET 4.0,MVC 3 OK
任何指针赞赏。
编辑:所有参考文献和文件在web.config中升级为:
- System.Web.Mvc,版本= 4.0.0.0
- System.Web.WebPages,版本= 2.0.0.0
- System.Web.Helpers,版本= 2.0.0.0
- System.Web.WebPages.Razor,版本= 2.0.0.0
编辑(2):以我/views/web.config(或/views/shared/web.config如果我尝试下面@保罗的溶液)中的元素,我有从继承的System.Web我自己的基类型。 Mvc.WebViewPage,在包含库中的引用已更新为MVC4,去定义带我到MVC4 DLL。
有没有什么这方面的改变在新版本? 我什么也看不见发行说明有关。
Answer 1:
我就遇到了这个问题,有一个Web应用程序-我的.cshtml
文件被困在System.Web.WebPages.WebViewPage
基类,当我需要的System.Web.Mvc.WebViewPage
。
首先,确保你的〜/查看/ 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
旁边的项目所产生的Visual Studio文件。 - 刷新的各项问题的项目
- 构建解决方案
对于VS2015的.user
和.sln
文件已移到.vs
对接下来要创建的隐藏文件夹.sln
文件。 然而,从下面的评论,错误消息暗示给我的是模具使用MVC的错版完全和删除此文件夹不解决问题。 据我所知,还没有已知的解决方案。
Answer 2:
更新到MVC 5时,我有同样的问题,它是由更新的浏览文件夹中的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>
主机 - > factoryType设为版本:4.0.0.0希望这可以帮助任何人。
Answer 3:
我尝试了所有的解决方案在这里,但他们没有为我工作。 同样,我的网站运行良好,但我没有IntelliSense和下了很多的东西在我的观点,即Visual Studio中无法识别,其中之一是让红色波浪线Html.BeginForm()
是做任何事情,以及与ViewBag
。
我有一个新的MVC 5项目。 经过比较的web.config线的时间,我终于找到固定对我来说。
我在我的根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,更改版本在我的项目引用(右击提到的每个参考,并选择“属性”,“版本”给予找到的每个组件中的编号不一致在属性窗口的底部,用于所选择的参考)。
实现上述之后,我现在有智能感知,但没有得到下的东西像任何未知的红线Html.BeginForm
, ViewBag.Title
等。
Answer 4:
我已经运行项目的清洁,并安装或重新安装的一切,仍然获得了大量的智能感知错误的,即使我的网站编译和运行良好。 智能感知终于为我工作,当我在浏览文件夹我的web.config文件改变了版本号。 就我而言,我编码果园的模块,它运行在MVC领域,但我认为这将使用MVC的最新版本帮助任何人。 下面是从浏览文件夹我的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>
Answer 5:
你需要复制Views/Web.config
到/Shared
。 这将告诉剃刀使用MVC基本型和解析器。 你可以在这里阅读更多: http://blog.slaks.net/2011/02/dissecting-razor-part-3-razor-and-mvc.html
Answer 6:
我是从升级后处理这个问题Visual Studio 2013
到Visual Studio 2015
试图最在这方面和其他类似SO找到文章的意见后,我终于发现了问题。 此修复程序的第一部分是更新所有的我NuGet
东西到最新版本(可能需要这样做在VS13
如果您遇到了Nuget
的bug),之后我不得不,你可能需要,修复版本在视图中列出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>
Answer 7:
在承包世界我经常使用的是使用较旧的映像机器。 乱投医上面我决定更新我的VS 2013的最新版本(更新4)之后。 90分钟,重新启动后,参考现在的工作就好了! 希望这可以帮助!
Answer 8:
有妄图一切,我发现,在我的情况下,它不工作,因为在Web项目的csproj文件不正确的属性值。 当我改变ToolsVersion至14,这符合我现在的IDE版本(即Visual Studio的2015年),一切工作就像一个魅力:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition=
.....
Answer 9:
对于那些VS从迁移2013一个项目2015年VS后这种痛苦,我能够从安装ASP.NET的工具更新来解决此问题https://visualstudiogallery.msdn.microsoft.com/c94a02e9-f2e9- 4bad-a952-a63a967e3935 /文件/6分之77371/ AspNet5.ENU.RC1_Update1.exe?SRC = VSIDE&UPDATE = TRUE 。
Answer 10:
更新为Visual Studio 2017年用户:
如果你刚刚迁移到Visual Studio 2017年和你的项目是MVC4,确保你回去到VS2017安装程序和“ASP.NET和Web开发”部分检查MVC4选项。 这是一个可选组件,而不是默认选中的。
这解决了我的问题
Answer 11:
只是为了扩大马特DeKrey的回答,只是删除csproj.user文件(而无需重新创建解决方案)能够解决这个问题对我来说。
唯一的副作用我是我需要开始行动恢复为使用特定的页面。
Answer 12:
我用MSDN上的以下文章(从MVC 4在这种情况下MVC 5)解决了这个问题
https://docs.microsoft.com/en-us/aspnet/mvc/overview/releases/how-to-upgrade-an-aspnet-mvc-4-and-web-api-project-to-aspnet-mvc- 5 -和-网络API-2
从文章的主要提取物是:
主要Web.config文件(不是一个在浏览文件夹)
在运行时模块更新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>
查看的Web.config
更新主机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>
然后页面下阻止更新到5.0.0.0到System.Web.Mvc任何引用
<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>
最后配置块下更新到3.0.0.0对System.Web引用
<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>
Answer 13:
最近得到了同样的问题,这是我如何固定它:在Visual Studio中的项目有问题打开,转到:
- 工具- > NuGet包管理器- >管理的NuGet包解决方案 。
- 在打开的窗口中,选择更新 。 然后单击更新所有 。
它会加载什么在你的项目中失踪,都应该回到正轨。
Answer 14:
刚刚开始考虑的问题我自己,这就是它看起来像我的情况。 如果你有正确的价值观在你的web配置,然后它只是在MVC4的错误。 http://connect.microsoft.com/VisualStudio/feedback/details/727729/viewbag-not-recognized-in-asp-net-mvc-4-project
Answer 15:
*<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>*
这种配置缺少,添加它并设置组件的相应版本
Answer 16:
作为一个主题的变化,我可以发誓向上和向下我的观点\ 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
因为得到了推出了一段时间后的安全更新。
Answer 17:
对于我来说,这是一个愚蠢的错误部署:Web项目可以有一个以上的web.config文件。 这是工作不是在生产中的开发人员的机器上,但我们并没有意识到部署脚本只抢到Web.config
在根文件,并没有复制Web.config
在文件Views
文件夹。
Answer 18:
我遇到的这个具体问题为好; 没有(或不正确)尝试使用剃刀标签时,智能感知显示。 我的具体问题是VS2015抱怨Html.BeginForm没有在当前的背景下存在的。
我有我的MVC项目设置方面,并设法缩小我的错误web.config文件的原因一个特定的区域,而不是全局的Web.config。
事实证明,这个问题对我的原因是,我已经加了SQL的connectionString到web.config中对没有工作的区域,这(我假设)引起了解析错误,但该项目编译正确。
移动ConnectionString,以全局的Web.config已纠正的问题。 希望这可能是一些使用他人的。
Answer 19:
我的情况只有我创建了一个名为的自定义类后发生BaseViewPage
是推翻了WebViewPage
类。 我最初加入下面我主要 Web.confg文件:
<pages pageBaseType="ZooResourceLibrary.Web.Support.BaseViewPage">
而同样在查看文件夹的web.config文件:
<pages pageBaseType="ZooResourceLibrary.Web.Support.BaseViewPage">
我试过很多其他的答案,并没有做,同时还允许我保持我的伎俩BaseViewPage
类。 我固定的方式,它是删除pageBaseType
仅从主 Web.config文件属性。 保持它在web.config中查看 。
Answer 20:
我在SO跨越几个答案来了,并在年底,我意识到,我的错误是我当时拼错“Html.TextBoxFor。” 在我来说,我写的是“Html.TextboxFor。” 我没有大写形式TextBoxFor的B中。 修正了就万事大吉了。 问题解决了。 我希望这可以帮助别人。
Answer 21:
对了,我一直在试图解决这个问题的某个时候。 我使用所有的各种堆栈溢出主题对此的解决方案,并似乎没有奏效。
我刚才已经解决了该问题今天上午。 之后你给固定项目和观点都在web.config,确保所有.dll版本与你在引用文件夹什么匹配。 您将需要卸载项目,编辑的.csproj,然后更新文件中的所有.dll文件的版本。
System.Web.Helpers
System.Web.Mvc
System.Web.WebPages
希望这会有所帮助,因为我终于解决了这个问题! 没有更多的红色波浪线。
这也固定我有地方,我没有得到的选项添加控制器,查看等上下文菜单问题
Answer 22:
对我来说,解决办法是改变如下:
<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>
文章来源: Razor Views not seeing System.Web.Mvc.HtmlHelper