web-dev-qa-db-ja.com

「System.Web.Webpages.Html.Htmlhelper」には「Sitecore」の定義が含まれていません

_@Html.Sitecore_を使用すると、Visual Studioでこのエラーが発生します。

「System.Web.Webpages.Html.Htmlhelper」には「Sitecore」の定義が含まれておらず、「Sitecore.Mvc.HtmlHelperExtensions.Sitecore(System.Web.Mvc.HtmlHelper)」にはいくつかの無効な引数があります。`

ただし、デプロイすると問題なく実行されます。

Sitecore 7.2とMVC 5.1を使用しています。

enter image description here

私が読んだ同様のエラーメッセージに関する記事では、Viewsフォルダー_system.web.webPages.razor_ファイルの_web.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を再起動するだけでいいと思っていましたが、うまくいきませんでした。誰か提案がありますか?.

[〜#〜] edit [〜#〜]これは標準の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>
_

また、ビジュアルスタジオからの出力を見ると、以前は見つけられなかった追加のエラーがあります。

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

編集2

これはもはやSitecore MVCの問題ではないと思います。 @Html.ActionLink("xxx", "xxx")でも同様のエラーが発生します。他の人がVS2012でこの問題を見たことがありますが、私は2013を使用しています。

編集

現在、この質問に対する回答はかなり多くあります。このエラーが発生する理由は数多くあると思われるので、それぞれを試すことをお勧めします。

15
Martin Davies

この問題を解決しました。 Visual Studio 2013のUpdate 2をインストールするだけで済みました。

役立つアドバイスを提供してくれたStriplingWarriorとAhmed Okourに感謝します。

4
Martin Davies

少し前に同じ問題があります。/viewsフォルダー内にweb.configがないことがわかりました。他のプロジェクトの/ viewsからweb.configをコピーし、問題を解決しました。

16
Borj

これを試してから、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でそれを取得できるようにします。

13
Ahmed Okour

あなたは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>
3

上部の以下の行を使用しましたが、問題は解決しました。

@inherits System.Web.Mvc.WebViewPage
2
Rajan

時にはそれはばかげたことです。あなたが次のようなことをしていないことを確認してください

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

または

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

あなたがやるべき時

@Html.Sitecore().Placeholder("placeholdername") // this works
0
Paul George
  <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>
0
Chamara