【问题标题】:Razor Views not seeing System.Web.Mvc.HtmlHelperRazor 视图没有看到 System.Web.Mvc.HtmlHelper
【发布时间】:2012-08-16 00:25:36
【问题描述】:

我正在升级到 MVC4。我已按照http://www.asp.net/whitepapers/mvc4-release-notes#_Toc303253806 的说明进行操作,但在我的 Razor 视图和布局中出现类似

的错误
  • “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 打开并运行正常

任何指针表示赞赏。

编辑: 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 的解决方案)的元素中,我有自己的基本类型,它继承自 System.Web.Mvc.WebViewPage ,包含库中的引用已更新为 MVC4 并转到定义将我带到 MVC4 dll。

在新版本中这方面有什么变化吗?我在发行说明中看不到任何相关内容。

【问题讨论】:

  • 你检查过你的 web.configs 了吗?
  • 您的 web.config 引用了哪个版本的网页?
  • 嗨,你解决了这个问题吗?我有同样的问题。任何帮助都会很棒。
  • 抱歉,我做了……但我无法记录。我摆弄了所有配置几个小时,最终它开始工作。我从未指出过“神奇”的修复方法。
  • 我遇到了类似的问题,但我的智能感知错误是在我的同一个项目中引用静态类时出现的。它没有找到命名空间。这里有什么想法吗?

标签: c# razor asp.net-mvc-4


【解决方案1】:

Visual Studio 2017 用户更新:

如果您刚刚迁移到 Visual Studio 2017 并且您的项目是 MVC4,请确保您返回 VS2017 安装程序并检查“ASP.NET 和 Web 开发”部分下的 MVC4 选项。它是一个可选组件,默认情况下未选中。

这解决了我的问题

【讨论】:

  • 这对我来说是正确的。谢谢。
【解决方案2】:

好的,我一直在尝试解决这个问题。我已经使用了有关此问题的各种 Stack Overflow 主题中的所有解决方案,但似乎没有一个有效。

我今天早上刚刚解决了这个问题。在为项目和视图修复 web.config 之后,确保所有 .dll 版本都与您在引用文件夹中的内容匹配。您需要卸载项目,编辑 .csproj,然后更新该文件中的所有 .dll 版本。

System.Web.Helpers
System.Web.Mvc
System.Web.WebPages

希望这会有所帮助,因为我终于解决了这个问题!不再有红色波浪线。

这也解决了我遇到的上下文菜单问题,我没有选择添加控制器、视图等。

【讨论】:

    【解决方案3】:

    最近遇到了同样的问题,我就是这样解决的: 在 Visual Studio 上打开相关项目,转到:

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

    它将加载您项目中缺少的内容,并且一切都应该回到正轨。

    【讨论】:

      【解决方案4】:

      我使用 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-and-web-api-2

      文章主要摘录如下:

      Main Web.config(不是 Views 文件夹中的那个)

      在运行时块中更新 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 块并将 pages:Version 值更新为 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>
      

      最后在配置块下更新 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>
      

      【讨论】:

        【解决方案5】:

        我在 SO 中遇到了几个答案,最后我意识到我的错误是我拼错了“Html.TextBoxFor”。就我而言,我写的是“Html.TextboxFor”。我没有大写 TextBoxFor 中的 B。解决了这个问题,瞧。问题解决了。我希望这对某人有所帮助。

        【讨论】:

          【解决方案6】:

          我的情况只发生在我创建了一个名为 BaseViewPage 的自定义类之后,该类覆盖了 WebViewPage 类。我最初将以下内容添加到我的 Main Web.confg 文件中:

          <pages pageBaseType="ZooResourceLibrary.Web.Support.BaseViewPage">
          

          查看文件夹的 web.config 文件也是如此:

          <pages pageBaseType="ZooResourceLibrary.Web.Support.BaseViewPage">
          

          我尝试了许多其他答案,但都没有成功,同时仍然允许我保留 BaseViewPage 课程。我修复它的方法是仅从 Main Web.config 文件中删除 pageBaseType 属性。将其保存在 View web.config 中。

          【讨论】:

            【解决方案7】:

            我在使用 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>
            

            那么,重要的是,如果上面已经很好,有些人发现这是关键:

            1. 对溶液运行清洁
            2. 卸载有问题的项目
            3. 删除 Visual Studio 在项目旁边生成的 .user 文件。
            4. 重新加载包含问题的项目
            5. 构建解决方案

            对于 VS2015.user.sln 文件已移动到在 .sln 文件旁边创建的 .vs 隐藏文件夹中。但是,从下面的 cmets 中,错误消息暗示我该工具完全使用了错误的 MVC 版本,删除此文件夹并不能解决问题。据我所知,没有已知的解决方案。

            【讨论】:

            • 我认为第二部分是关键。谢谢!
            • Matt - 我在这上面花了几个小时,终于你的解决方案奏效了。谢谢!卸载、删除 .user 和重新加载对我有用。 .user 文件到底是什么?
            • .user 文件是 Visual Studio 对您的项目设置的缓存,例如当前打开的窗口等。根据我的经验,如果我发现任何异常,删除 .user 文件可能会有所帮助。另外,请注意 .sln 旁边的 .suo 文件;这是同一类事情,但对于解决方案文件。 (例如,在旧版本的 VS 中,此文件可能会损坏,从而破坏您的智能感知......)
            • 太糟糕了 :( 这对于 VS2015 中的相同症状不起作用
            • 我同意@SerjSagan - 这并不能解决 VS2015 中的这些症状。我得到的错误是编辑器中的'_Page_Views_Home_Index_cshtml' does not contain a definition for 'ViewBag' 和错误列表(CS0234)中的The type or namespace name 'AspNet' does not exist in the namespace 'Microsoft'。我正在使用 MVC 5,这一切都是在我从 VS2013 更新到 VS2015 时开始的。如果有人有任何帮助,将不胜感激,因为这开始让我很恼火!咕噜!
            【解决方案8】:

            我在这里尝试了所有解决方案,但没有一个对我有用。同样,我的网站运行良好,但我没有智能感知,并且在我认为 Visual Studio 无法识别的许多事物下出现红色波浪线,其中之一是 Html.BeginForm(),以及与 @ 有关的任何事物987654322@.

            我正在处理一个新的 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 等下面没有出现任何未知的红线。

            【讨论】:

            • 谢谢!不确定,但这可能只在 /Views/Web.Config 文件中是必需的,但我把它放在根目录中,它就成功了。干杯。
            • 我根据属性窗口中的实际 dll 版本修改了每个引用,我发现了问题。感谢队友为我指明了正确的方向。
            • 非常感谢!我和你有同样的问题,这解决了它:)
            【解决方案9】:

            我在更新到 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 设置为 version:4.0.0.0 希望这对任何人都有帮助。

            【讨论】:

            • 是的,是的,是的。它有帮助!谢谢!
            • 谢谢。从字面上看,已经尝试了 20 多种不同的解决方案,您的解决方案是第一个起作用的。非常感谢。
            【解决方案10】:

            我也遇到过这个具体问题;尝试使用剃须刀标签时没有(或不正确)智能感知显示。我的具体问题是 VS2015 抱怨 Html.BeginForm 在当前上下文中不存在。

            我在我的 MVC 项目中设置了区域,并设法将我的错误原因缩小到特定区域的 web.config 文件,而不是全局 web.config。

            事实证明,对我来说这个问题的原因是我在 web.config 中添加了一个 SQL connectionString 到不工作的区域,这(我假设)导致了解析错误,但是项目编译正确。

            将 connectionString 移至全局 web.config 已解决该问题。希望这可能对其他人有用。

            【讨论】:

              【解决方案11】:

              对我来说,这是一个愚蠢的部署错误:Web 项目可以有多个 web.config。它在开发人员的机器上运行,而不是在生产环境中,但我们没有意识到部署脚本只抓取了根目录下的Web.config 文件,并且没有复制Views 文件夹中的Web.config 文件。

              【讨论】:

                【解决方案12】:

                对我来说,解决方案是更改以下内容:

                  <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>
                

                【讨论】:

                  【解决方案13】:

                  对于那些在将项目从 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 工具更新来解决此问题。

                  【讨论】:

                  • 这让我走上了正确的道路。我的 VS 2105 仍然需要 Visual Studio Update 1。更新后一切正常。
                  • 这很有趣,更新 1 并没有为我修复它,但网络工具更新可以。
                  • 在这里工作,但我还必须清除所有用户数据。不错的解决方案。
                  【解决方案14】:

                  作为一个主题的变体,我可以上下发誓我的 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,因为不久前推出的安全更新。

                  【讨论】:

                    【解决方案15】:

                    尝试了一切都是徒劳的,我发现在我的情况下它不起作用,因为 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=
                      .....
                    

                    【讨论】:

                      【解决方案16】:

                      我在从Visual Studio 2013 升级到Visual Studio 2015 后正在处理这个问题在尝试了这个和其他类似 SO 帖子中的大部分建议之后,我终于找到了问题所在。修复的第一部分是将我的所有NuGet 内容更新到最新版本(如果您遇到Nuget 错误,您可能需要在VS13 中执行此操作)之后,我不得不这样做,如您所愿需要修复 Views 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>
                      

                      【讨论】:

                      • 尝试了所有...不幸的是没有帮助..! :(
                      【解决方案17】:
                      *<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】:

                        在承包世界中,我经常使用使用旧图像的机器。在尝试了上述所有操作后,我决定将我的 VS 2013 更新到最新版本(更新 4)。 90 分钟后重新启动,参考现在工作正常!希望这会有所帮助!

                        【讨论】:

                        • 是的,对我来说,Visual Studio 2013 的更新 5(我安装了最新版本)也很有帮助。
                        【解决方案19】:

                        只是为了扩展 Matt DeKrey 的答案,只需删除 csproj.user 文件(无需重新创建解决方案)就可以为我解决问题。

                        唯一的副作用是我需要将开始操作重置为使用特定页面。

                        【讨论】:

                          【解决方案20】:

                          我已经运行了一个干净的项目,并安装或重新安装了所有内容,但仍然收到很多 Intellisense 错误,即使我的网站正在编译和运行良好。当我更改 Views 文件夹中 web.config 文件中的版本号时,Intellisense 终于为我工作了。就我而言,我在 Orchard 中编写了一个模块,该模块在 MVC 区域中运行,但我认为这将帮助任何使用最新版本的 MVC 的人。这是我的 web.config 来自 Views 文件夹

                              <?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>
                          

                          【讨论】:

                          • 对我来说,它是将 子项从 2.0 升级到 3.0 版。谢谢!
                          • 这就是伙计们!请注意 Views/Web.config 中的版本号。它们必须与您引用的程序集版本匹配。
                          【解决方案21】:

                          我自己刚开始研究这个问题,这就是我的情况。如果您的 Web 配置中有正确的值,那么它只是 MVC4 中的一个错误。 http://connect.microsoft.com/VisualStudio/feedback/details/727729/viewbag-not-recognized-in-asp-net-mvc-4-project

                          【讨论】:

                            【解决方案22】:

                            您需要将Views/Web.config 复制到/Shared。这将告诉 Razor 使用 MVC 基本类型和解析器。你可以在这里阅读更多:http://blog.slaks.net/2011/02/dissecting-razor-part-3-razor-and-mvc.html

                            【讨论】:

                            • 谢谢,但不高兴。我在 Edit(2) 中提供了有关该问题的更多信息。
                            • 这消除了警告信息,但完全破坏了网站!我们在这里做了很多 MVC 开发,我从未在 /shared 文件夹中看到过这些文件。
                            猜你喜欢
                            • 2012-03-06
                            • 2016-05-23
                            • 2011-09-30
                            • 1970-01-01
                            • 1970-01-01
                            • 2014-07-14
                            • 1970-01-01
                            • 2011-06-24
                            • 1970-01-01
                            相关资源
                            最近更新 更多