_@Html.Sitecore
_を使用すると、Visual Studioでこのエラーが発生します。
「System.Web.Webpages.Html.Htmlhelper」には「Sitecore」の定義が含まれておらず、「Sitecore.Mvc.HtmlHelperExtensions.Sitecore(System.Web.Mvc.HtmlHelper)」にはいくつかの無効な引数があります。`
ただし、デプロイすると問題なく実行されます。
Sitecore 7.2とMVC 5.1を使用しています。
私が読んだ同様のエラーメッセージに関する記事では、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を使用しています。
編集
現在、この質問に対する回答はかなり多くあります。このエラーが発生する理由は数多くあると思われるので、それぞれを試すことをお勧めします。
この問題を解決しました。 Visual Studio 2013のUpdate 2をインストールするだけで済みました。
役立つアドバイスを提供してくれたStriplingWarriorとAhmed Okourに感謝します。
少し前に同じ問題があります。/viewsフォルダー内にweb.configがないことがわかりました。他のプロジェクトの/ viewsからweb.configをコピーし、問題を解決しました。
これを試してから、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でそれを取得できるようにします。
あなたは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>
上部の以下の行を使用しましたが、問題は解決しました。
@inherits System.Web.Mvc.WebViewPage
時にはそれはばかげたことです。あなたが次のようなことをしていないことを確認してください
@Html.Sitecore("placeholdername") // no method
または
@Html.Sitcore.Placeholder("placeholdername") // Missing parenthesis
あなたがやるべき時
@Html.Sitecore().Placeholder("placeholdername") // this works
<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>