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

введите здесь описание изображения

Статьи, которые я читал, посвященные подобным сообщениям об ошибках, говорят о разделе 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>

Originally I thought I'd just need to restart VS, but that didn't work. Does anyone have any suggestions.

ИЗМЕНИТЬ Это стандартная установка 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

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


person Martin Davies    schedule 10.06.2014    source источник
comment
Здесь была решена аналогичная проблема: Решения Stackoverflow   -  person paweln66    schedule 07.01.2016


Ответы (8)


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

person Community    schedule 20.06.2014
comment
Файл /views/web.config в моем случае уже присутствовал, но спасибо. - person Martin Davies; 20.06.2014
comment
Я также вытащил файл бритвы в папку макетов, что вызывало у меня говядину. Итак, чтобы быть ясным, вам нужно либо сохранить все файлы бритвы в папке представлений, либо добавить web.config везде, где вы загружаете любые представления бритвы. - person Steve Newstead; 10.11.2015

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

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

person Ahmed Okour    schedule 10.06.2014
comment
Верно, но у него есть @using SiteCore.Mvc в верхней части его обзора бритвы, так что я не думаю, что это решит проблему. - person StriplingWarrior; 11.06.2014
comment
Пробовал добавить в конфиг тоже, не помогло. Но спасибо за предложение - person Martin Davies; 11.06.2014
comment
Тогда это должна быть проблема с визуальной студией, а не с Sitecore, попробуйте на другом компьютере. - person Ahmed Okour; 11.06.2014
comment
Для VS 2013 следуйте ответу Мартина об обновлении до обновления 2. Вам также понадобятся соответствующие файлы App_Config в каталоге вашего проекта (хотя и не обязательно включенные в ваш проект). Вот мой пост об этом: - seanholmesby.com/ - person Sean Holmesby; 01.08.2014

Теперь я решил эту проблему. Мне просто пришлось установить обновление 2 Visual Studio 2013. Как это расстраивает.

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

person Martin Davies    schedule 11.06.2014
comment
Я резюмировал это в сообщении в блоге: sitecoreskills.blogspot.com/2014/06/ - person Martin Davies; 19.06.2014
comment
Да, это решение отлично работает и для меня. Я трачу часы на изучение файлов web.config, но, наконец, обновление 5 решает проблему. - person paweln66; 08.01.2016

Вы говорите, что используете 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>
person StriplingWarrior    schedule 10.06.2014
comment
Я должен был упомянуть, что это стандартная установка Sitecore 7.2, и поэтому есть перенаправления привязки сборки для System.Web.WebPages.Razor и System.Web.Mvc (см. Мои обновления к вопросу.). Тем не мение. Я следовал вашим советам, но, к сожалению, они не изменились. - person Martin Davies; 10.06.2014
comment
Этот парень очевидно также рекомендует закомментировать бритву <sectionGroup>. Вы сделали это? - person StriplingWarrior; 10.06.2014
comment
Тоже пробовал, но безрезультатно. Думаю, это может быть один для поддержки Sitecore. - person Martin Davies; 11.06.2014

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

@inherits System.Web.Mvc.WebViewPage
person Rajan    schedule 20.09.2016

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

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

or

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

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

@Html.Sitecore().Placeholder("placeholdername") // this works
person Paul George    schedule 11.01.2016

Я добавил dll Sitecore.Mvc в ссылки с локальной копией в true и добавил тег ниже в представление web.config под тегом пространств имен, после чего моя проблема решена.

person Ravindra    schedule 05.12.2016

person    schedule
comment
Сначала перейдите к (ссылка -> Добавить ссылку) и добавьте kendo.Mvc.dll, затем перейдите к файлу просмотра и отредактируйте файл webconfig, как указано выше. - person Chamara; 07.10.2016