16

当我使用时,我在 Visual Studio 中收到此错误@Html.Sitecore

“System.Web.Webpages.Html.Htmlhelper”不包含“Sitecore”的定义,并且最佳扩展方法重载“Sitecore.Mvc.HtmlHelperExtensions.Sitecore(System.Web.Mvc.HtmlHelper)”有一些无效参数。

但是,一旦部署,它就可以毫无问题地运行。

我将 Sitecore 7.2 与 MVC 5.1 一起使用。

在此处输入图像描述

我读过的文章处理类似的错误消息,谈论文件夹文件的system.web.webPages.razor部分。这就是它在我的解决方案中的显示方式。Viewsweb.config

<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.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.Routing" />
  </namespaces>
</pages>

最初我以为我只需要重新启动VS,但这不起作用。有没有人有什么建议。

编辑 这是标准的 Sitecore 7.2 安装,因此具有以下绑定重定向:

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" xmlns="urn:schemas-microsoft-com:asm.v1"/>
    <bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="5.1.0.0" xmlns="urn:schemas-microsoft-com:asm.v1"/>
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31bf3856ad364e35" xmlns="urn:schemas-microsoft-com:asm.v1"/>
    <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" xmlns="urn:schemas-microsoft-com:asm.v1"/>
  </dependentAssembly>

此外,在查看 Visual Studio 的输出时,还有一个我之前没有发现的额外错误:

Instance argument: cannot convert from 'System.Web.WebPages.Html.HtmlHelper' to 'System.Web.Mvc.HtmlHelper'

编辑 2

我不再认为这是 Sitecore MVC 问题。我收到类似的错误@Html.ActionLink("xxx", "xxx")。其他人在 VS2012 中看到了这个问题,但我使用的是 2013。

编辑 3

这个问题现在有很多答案。我建议尝试它们中的每一个,因为似乎有很多原因可能会发生此错误。

4

8 回答 8

18

不久前我有同样的问题。我们发现我们缺少 /views 文件夹中的 web.config。我们从我的其他项目的 /views 中复制了一个 web.config,它解决了这个问题。

于 2014-06-20T07:56:36.930 回答
15

试试这个,然后尝试重新启动 Visual Studio。

<system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="Sitecore.Mvc" />
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>

您忘记添加 <add namespace="Sitecore.Mvc" />以便智能感知可以在 VS 中获取它。

于 2014-06-10T22:44:59.110 回答
4

我现在已经解决了这个问题。我只需要安装 Visual Studio 2013 的更新 2。多么令人沮丧。

感谢 StriplingWarrior 和 Ahmed Okour 的有用建议。

于 2014-06-11T22:59:50.450 回答
4

我在顶部使用了以下行,问题已解决。

@inherits System.Web.Mvc.WebViewPage
于 2016-09-20T10:55:34.903 回答
3

您说您使用的是 MVC 5,但您在提供的代码中引用了版本 3。这是我的说法:

<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

尝试检查整个 web.config 文件(如果有多个区域,则检查所有 web.config 文件)并确保所有版本都设置正确。对于 MVC 5,System.Web.WebPages应该在版本 2 上,而 System.Web.WebPages.Razor 应该在版本 3 上。

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

...

  <assemblies>
    <add assembly="System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
    <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
    <add assembly="System.Web.Helpers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  </assemblies>
于 2014-06-10T18:22:40.630 回答
0

有时它是愚蠢的事情。检查你没有做类似的事情

@Html.Sitecore("placeholdername")   // no method

或者

@Html.Sitcore.Placeholder("placeholdername") // Missing parenthesis

当你应该做

@Html.Sitecore().Placeholder("placeholdername") // this works
于 2016-01-11T17:07:29.327 回答
0
  <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" />
    <add namespace="Kendo.Mvc.UI" />
    <add namespace="Telerik.Reporting" />
  </namespaces>
于 2016-10-07T06:44:55.813 回答
-1

我在引用中添加了 Sitecore.Mvc dll,并将本地复制为 true,并在命名空间标签下视图的 web.config 中添加了下面的标签,然后我的问题就解决了。

于 2016-12-05T10:34:54.087 回答