剃刀意见没有看到System.Web.Mvc.HtmlHelper(Razor Views not

2019-06-17 19:36发布

我在升级到MVC4的过程。 我按照指示在http://www.asp.net/whitepapers/mvc4-release-notes#_Toc303253806但在我的剃刀视图和布局,我有这样的错误

  • “System.Web.WebPages.Html.HtmlHelper”不包含关于“BeginRouteForm”和没有扩展方法“BeginRouteForm”接受类型“System.Web.WebPages.Html.HtmlHelper”的第一个参数的定义可以发现(你缺少using指令或程序集引用?)

我也有这样的错误:

  • “‘Viewbag’这个名字不会在目前情况下存在

当我将鼠标悬停在@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>

然后, 重要的是 ,有些人已经发现,如果上面来说已经不错了,这是关键:

  1. 上运行解决方案干净
  2. 卸载的各项问题的项目
  3. 删除.user旁边的项目所产生的Visual Studio文件。
  4. 刷新的各项问题的项目
  5. 构建解决方案

对于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.BeginFormViewBag.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 2013Visual Studio 2015试图最在这方面和其他类似SO找到文章的意见后,我终于发现了问题。 此修复程序的第一部分是更新所有的我NuGet东西到最新版本(可能需要这样做在VS13如果您遇到了Nuget的bug),之后我不得不,你可能需要,修复版本在视图中列出Web.config 。 这包括:

  1. 修复MVC版本及其子库的新版本(扩大References然后右击Sytem.Web.MVC然后Properties让你的版本)
  2. 修复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文件不正确的属性值。 当我改变ToolsVersion14,这符合我现在的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中的项目有问题打开,转到:

  1. 工具- > NuGet包管理器- >管理的NuGet包解决方案
  2. 在打开的窗口中,选择更新 。 然后单击更新所有

它会加载什么在你的项目中失踪,都应该回到正轨。



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