'System.Web.Webpages.Html.Htmlhelper' не содержит определения для 'Sitecore'

Я получаю эту ошибку в Visual Studio, когда я использую @Html.Sitecore:

"System.Web.Webpages.Html.Htmlhelper" не содержит определения для "Sitecore", а лучшие методы перегрузки - "Sitecore.Mvc.HtmlHelperExtensions.Sitecore(System.Web.Mvc.HtmlHelper)" содержит некоторые недопустимые аргументы.

Однако после развертывания он запускается без каких-либо проблем.

Я использую Sitecore 7.2 с MVC 5.1.

enter image description here

Статьи, которые я прочитал, которые имеют похожие сообщения об ошибках, расскажут о разделе system.web.webPages.razor файла web.config папке Views. Так оно и появляется в моем решении.

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

Также при просмотре вывода из visual studio появляется дополнительная ошибка, которую я не заметил раньше:

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

EDIT 2

Я больше не думаю, что это проблема Sitecore MVC. Я получаю аналогичную ошибку с @Html.ActionLink("xxx", "xxx"). Другие люди видели эту проблему в VS2012, но я использую 2013.

ИЗМЕНИТЬ 3

На этот вопрос есть довольно много ответов. Я рекомендую попробовать каждый из них, поскольку кажется, что существует множество причин возникновения этой ошибки.

Ответы

Ответ 1

Теперь я решил эту проблему. Я просто должен был установить Update 2 из Visual Studio 2013. Как сложно.

Спасибо StriplingWarrior и Ahmed Okour за полезные советы.

Ответ 2

У меня такая же проблема давным-давно. Мы выяснили, что нам не хватает папки web.config внутри /views. мы копируем файл web.config из моих других проектов/представлений, и он решил проблему.

Ответ 3

Попробуйте это, затем попробуйте перезапустить визуальную студию.

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

Ответ 4

Я использовал приведенную ниже строку наверху, и проблема была решена.

@inherits System.Web.Mvc.WebViewPage

Ответ 5

Вы говорите, что используете 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>

Ответ 6

Иногда это глупые вещи. Проверьте, что вы не делаете что-то вроде

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

или

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

когда вы должны делать

@Html.Sitecore().Placeholder("placeholdername") // this works

Ответ 7

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

Ответ 8

Я добавил файл Sitecore.Mvc в ссылках с копией local в true и добавил ниже тег в виде web.config по тегу namespaces, тогда моя проблема решена.