首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Razor视图看不到System.Web.Mvc.HtmlHelper

Razor视图看不到System.Web.Mvc.HtmlHelper
EN

Stack Overflow用户
提问于 2012-08-21 00:40:36
回答 22查看 102.7K关注 0票数 72

我正在升级到MVC4的过程中。我遵循了http://www.asp.net/whitepapers/mvc4-release-notes#_Toc303253806上的说明,但在我的Razor视图和布局中,我遇到了如下错误

  • 'System.Web.WebPages.Html.HtmlHelper‘不包含“BeginRouteForm”的定义,并且找不到接受类型为“System.Web.WebPages.Html.HtmlHelper”的第一个参数的扩展方法“BeginRouteForm”(是否缺少using指令或程序集引用?)

我也有类似这样的错误:

  • “名称'Viewbag‘在当前上下文

中不存在

当我将鼠标悬停在@Html上时,我可以看到它是System.Web.WebPages.Html.HtmlHelper类型,而不是System.Web.Mvc.HtmlHelper类型

我真的不确定其他相关信息,但这就是我所在的地方:

  • ,我还没有更新类库等等。
  • 该项目是在VS2010中创建的,但我正在VS2012
  • 中进行迁移。该项目在VS2012、.net 4.0、MVC3

中打开并运行正常

感谢您的指点。

编辑: web.config中的所有引用和文件升级到:

  • System.Web.Mvc,
  • System.Web.WebPages,Version=2.0.0.0
  • System.Web.Helpers,
  • System.Web.WebPages.Razor,Version=2.0.0.0

Version=4.0.0.0 Version=2.0.0.0

编辑(2):在我的/views/web.config (或者/views/shared/web.config,如果我尝试下面@Paul的解决方案)中的元素中,我有我自己的基类型,它继承自System.Web.Mvc.WebViewPage,包含库中的引用已经更新为MVC4,转到定义将我带到MVC4动态链接库。

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

EN

回答 22

Stack Overflow用户

发布于 2014-04-30 21:36:16

我在一个网络应用程序中遇到了这个问题--当我需要System.Web.Mvc.WebViewPage时,我的.cshtml文件卡在了System.Web.WebPages.WebViewPage基类上。

首先,确保您的~/Views/web.config文件具有正确的pageBaseType。在我的例子中,我设置为System.Web.Mvc.WebViewPage

代码语言:javascript
复制
<configuration>
  <system.web.webPages.razor>
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <!-- ... -->
    </pages>
  </system.web.webPages.razor>
</configuration>

然后,重要的是,一些人已经发现这是关键,如果上面已经很好的话:

使用issues

  • Delete在项目旁边
  1. 生成的.user文件的项目上运行一个干净的.user
  2. 重新加载带有问题的项目
  3. Build
  4. solution

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

票数 93
EN

Stack Overflow用户

发布于 2014-02-03 03:31:02

我在更新到MVC5时也遇到了同样的问题,通过更新视图文件夹中的web.config解决了这个问题。

代码语言:javascript
复制
<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希望这对任何人都有帮助。

票数 28
EN

Stack Overflow用户

发布于 2014-04-13 10:28:06

我尝试了这里的所有解决方案,但没有一个对我有效。同样,我的站点运行得很好,但我没有智能感知,并且在我的视图中有许多Visual Studio无法识别的东西下面有红色的波浪线,其中之一是Html.BeginForm(),以及任何与ViewBag有关的东西。

我正在处理一个新的MVC5项目。在比较了几个小时的web.config代码后,我终于找到了适合我的解决方法。

我的根目录中的web.config包含以下行:

代码语言:javascript
复制
<system.web>
  <compilation debug="true" targetFramework="4.5" />

  <!-- ... -->
</system.web>

我将之前的项目与未使用MVC 5的项目进行了比较,并复制了我发现新项目中缺少的一个块,如下所示:

代码语言:javascript
复制
<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等东西下面没有任何未知的红线。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12041633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档