Razor Views没有看到System.Web.Mvc.HtmlHelper
我正在升级到MVC4的过程中。 我遵循在http://www.asp.net/whitepapers/mvc4-release-notes#_Toc303253806的指示,但在我的剃刀视图和布局,我有错误
- 'System.Web.WebPages.Html.HtmlHelper'没有包含“BeginRouteForm”的定义,也没有find接受'System.Web.WebPages.Html.HtmlHelper'types的第一个参数的扩展方法'BeginRouteForm'(你缺less使用指令或程序集引用?)
我也有像这样的错误:
- “当前上下文中不存在名称”Viewbag“
当我hover在@Html上,我可以看到它是System.Web.WebPages.Html.HtmlHelper而不是System.Web.Mvc.HtmlHelper
不确定其他信息是相关的,但这是我的位置:
- 我还没有更新类图书馆等等。
- 该项目是在VS2010中创build的,但是我正在VS2012中进行迁移
- 该项目打开并运行正常与VS2012,。NET 4.0,MVC 3
任何指针赞赏。
编辑: 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,如果我尝试下面的@Paul的解决scheme),我有我自己的基本types,从System.Webinheritance。 Mvc.WebViewPage,在包含库中的引用已经更新到MVC4,并进入定义带我到MVC4 DLL。
新版本在这方面有什么变化吗? 我在发行说明中看不到任何相关内容。
我遇到了一个Web应用程序的问题 – 当我需要System.Web.Mvc.WebViewPage
时,我的.cshtml
文件卡在System.Web.WebPages.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>
那么重要的是 ,有些人认为这是关键,如果上述已经很好:
- 运行一个干净的解决scheme
- 卸载与问题的项目
- 删除Visual Studio在项目旁边生成的
.user
文件。 - 重新加载项目的问题
- build立解决scheme
对于VS2015 , .user
和.sln
文件已移至.sln
文件旁边创build的.vs
隐藏文件夹。 但是,从下面的评论,错误消息暗示我的工具是完全使用MVC的错误版本,删除此文件夹不能解决问题。 据我所知,没有一个已知的解决scheme。
更新到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>
主机 – > factoryType被设置为版本:4.0.0.0希望这可以帮助任何人。
我尝试了所有的解决scheme,但没有一个为我工作。 再次,我的网站运行良好,但我没有intellisense和许多事情在我的意见,Visual Studio无法识别,其中之一是Html.BeginForm()
,以及任何必须做的红色波浪线与ViewBag
。
我正在使用一个新的MVC 5项目。 经过几个小时比较web.config行,我终于find了什么修复了我。
我的根目录中的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中,更改版本以匹配在我的项目引用中find的每个程序集的编号(右键单击提到的每个引用并select“属性”,“版本”在所选参考的属性窗口的底部)。
实现以上,我现在有智能感知,并没有得到像Html.BeginForm
, ViewBag.Title
等东西的任何未知的红线。
我已经运行一个项目干净,并安装或重新安装的一切,仍然得到很多Intellisense错误,即使我的网站编译和运行良好。 当我更改Views文件夹中的web.config文件中的版本号时,Intellisense终于为我工作了。 就我而言,我在Orchard中编写了一个模块,该模块运行在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>
您需要将Views/Web.config
复制到/Shared
。 这将告诉Razor使用MVC基types和parsing器。 你可以阅读更多: http :
从Visual Studio 2013
升级到Visual Studio 2015
之后,我正在处理这个问题在尝试了在这个和其他类似SOpost中发现的大部分build议之后,我终于find了问题。 修复的第一部分是将我的NuGet
所有内容更新到最新版本(如果遇到Nuget
错误,您可能需要在VS13
执行此操作)之后,必要时可能需要修复版本列在Views 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>
尝试了一切徒然,我发现在我的情况下,它不工作,因为在Web Project 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= .....
对于那些在从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 。
只要展开Matt DeKrey的回答,只要删除csproj.user文件(不需要重新创build解决scheme)就可以为我解决问题。
我唯一的副作用是我需要将开始操作重置为使用特定页面。
在签约的世界中,我经常使用使用旧图像的机器。 经过上面的尝试,我决定更新我的VS 2013到最新版本(更新4)。 90分钟后重新启动,参考文件现在工作得很好! 希望这可以帮助!
最近得到了同样的问题,这是我如何解决它:在Visual Studio中打开您的项目打开,转到:
- 工具 – > NuGet包pipe理器 – >pipe理解决scheme的NuGet包 。
- 在打开的窗口中,select更新 。 然后点击全部更新 。
它会加载你的项目中缺less的东西,所有的东西都应该回到正轨。
刚开始自己研究这个问题,这就是我的情况。 如果你在你的webconfiguration中有正确的值,那么它只是MVC4中的一个错误。 http://connect.microsoft.com/VisualStudio/feedback/details/727729/viewbag-not-recognized-in-asp-net-mvc-4-project
*<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>*
缺less此configuration,添加它并设置相应版本的程序集
作为一个主题的变化,我可以发誓,我的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
因为那个安全更新被推出了一段时间。
至于我,这是一个愚蠢的部署错误:Web项目可以有多个web.config。 它在开发人员的机器上工作,而不是在生产环境中工作,但是我们没有意识到部署脚本只抓取了根目录下的Web.config
文件,而且没有复制Views
文件夹中的Web.config
文件。
我也遇到过这个具体问题。 在尝试使用razor标签时没有(或不正确的)智能感知显示。 我的具体问题是VS2015抱怨Html.BeginForm在当前上下文中不存在。
我已经在我的MVC项目中设置了区域,并设法将错误的原因缩小到特定区域的web.config文件,而不是全局的web.config。
事实certificate,这个问题的原因是,我已经将SQL连接string添加到该web.config的区域是不工作的,这(我假设)导致parsing错误,但项目编译正确。
将connectionString移到全局的web.config已经解决了这个问题。 希望这可能对别人有用。
我的情况只发生在我创build了一个名为BaseViewPage
的自定义类,它覆盖了WebViewPage
类。 我最初将以下内容添加到我的主 Web.confg文件中:
<pages pageBaseType="ZooResourceLibrary.Web.Support.BaseViewPage">
和查看文件夹web.config文件一样:
<pages pageBaseType="ZooResourceLibrary.Web.Support.BaseViewPage">
我尝试了许多其他的答案,而没有做的伎俩,而仍然让我保持我的BaseViewPage
类。 我解决这个问题的方法是只从主 Web.config文件中删除pageBaseType
属性。 将其保存在View web.config中。
我遇到了几个答案,最后我意识到我的错误是我拼错了“Html.TextBoxFor”。 在我的情况下,我写的是“Html.TextboxFor”。 我没有在TextBoxFor中大写B. 修正了这个问题。 问题解决了。 我希望这可以帮助别人。
我用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 -和-networkingAPI-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>
然后在页面块下更新对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>
最后在configuration块下将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>
对我来说,解决方法是改变以下内容:
<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>