16

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

'System.Web.Webpages.Html.Htmlhelper' には 'Sitecore' の定義が含まれておらず、最適な拡張メソッド オーバーロード 'Sitecore.Mvc.HtmlHelperExtensions.Sitecore(System.Web.Mvc.HtmlHelper)' にはいくつかの無効な引数があります。

ただし、展開すると、問題なく実行されます。

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

ここに画像の説明を入力

同様のエラー メッセージを扱う記事を読んだことがありますが、フォルダファイルの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>

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

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" />IntelliSense が VS で取得できるように追加するのを忘れて いました。

于 2014-06-10T22:44:59.110 に答える
4

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

有益なアドバイスをくれた StriplingWarrior と Ahmed Okour に感謝します。

于 2014-06-11T22:59:50.450 に答える
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 に答える