Ответ 1
Теперь я решил эту проблему. Я просто должен был установить Update 2 из Visual Studio 2013. Как сложно.
Спасибо StriplingWarrior и Ahmed Okour за полезные советы.
Я получаю эту ошибку в 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>
Первоначально я думал, что мне просто нужно перезапустить 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
На этот вопрос есть довольно много ответов. Я рекомендую попробовать каждый из них, поскольку кажется, что существует множество причин возникновения этой ошибки.
Теперь я решил эту проблему. Я просто должен был установить Update 2 из Visual Studio 2013. Как сложно.
Спасибо StriplingWarrior и Ahmed Okour за полезные советы.
У меня такая же проблема давным-давно. Мы выяснили, что нам не хватает папки web.config внутри /views. мы копируем файл web.config из моих других проектов/представлений, и он решил проблему.
Попробуйте это, затем попробуйте перезапустить визуальную студию.
<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.
Я использовал приведенную ниже строку наверху, и проблема была решена.
@inherits System.Web.Mvc.WebViewPage
Вы говорите, что используете 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>
Иногда это глупые вещи. Проверьте, что вы не делаете что-то вроде
@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>
Я добавил файл Sitecore.Mvc в ссылках с копией local в true и добавил ниже тег в виде web.config по тегу namespaces, тогда моя проблема решена.