web-dev-qa-db-fra.com

'System.Web.Webpages.Html.Htmlhelper' ne contient pas de définition pour 'Sitecore'

Je reçois cette erreur dans Visual Studio lorsque j'utilise @Html.Sitecore:

'System.Web.Webpages.Html.Htmlhelper' ne contient pas de définition pour 'Sitecore' et la meilleure méthode d'extension surcharge 'Sitecore.Mvc.HtmlHelperExtensions.Sitecore (System.Web.Mvc.HtmlHelper)' contient des arguments invalides

Cependant, une fois déployé, il fonctionne sans problème.

J'utilise Sitecore 7.2 avec MVC 5.1.

enter image description here

Les articles que j'ai lus traitent de messages d'erreur similaires, parlent de la section system.web.webPages.razor du fichier Views folder web.config. Voici comment cela apparaît dans ma solution.

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

Au départ, je pensais que je devais simplement redémarrer VS, mais cela ne fonctionnait pas. Est-ce que quelqu'un a des suggestions.

EDIT Il s’agit de l’installation standard de Sitecore 7.2, ainsi que des redirections de liaison suivantes:

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

De plus, lorsque je regarde la sortie de visual studio, il y a une erreur supplémentaire que je n'ai pas repérée auparavant:

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

EDIT 2

Je ne pense plus qu'il s'agisse d'un problème lié à Sitecore MVC. Je reçois une erreur similaire avec @Html.ActionLink("xxx", "xxx"). D'autres personnes ont vu ce problème dans VS2012, mais j'utilise 2013.

EDIT 3

Il y a maintenant pas mal de réponses à cette question. Je recommande d'essayer chacun d'entre eux car il semble qu'il y ait de nombreuses raisons pour lesquelles cette erreur pourrait se produire.

13
Martin Davies

J'ai maintenant résolu ce problème. Je devais simplement installer la mise à jour 2 de Visual Studio 2013. Quelle frustration!.

Merci à StriplingWarrior et Ahmed Okour pour vos conseils utiles.

4
Martin Davies

J'ai le même problème il y a un moment. Nous avons découvert qu'il nous manque le dossier web.config inside/views. nous copions un web.config à partir de mes autres projets/vues et cela résout le problème.

15
Borj

Essayez ceci, puis essayez de redémarrer 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>

Vous avez oublié d'ajouter <add namespace="Sitecore.Mvc" /> pour qu'intelliSense puisse le récupérer dans VS.

12
Ahmed Okour

Vous dites que vous utilisez MVC 5, mais vous faites référence à la version 3 dans le code que vous avez fourni. Voici ce que dit le mien:

<Host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

Essayez de vérifier l'intégralité de votre fichier web.config (ou de tous les fichiers web.config si vous avez plusieurs zones) et de vous assurer que toutes les versions sont définies correctement. Pour MVC 5, System.Web.WebPages devrait être sur la version 2 et System.Web.WebPages.Razor devrait être sur la version 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>
2
StriplingWarrior

J'ai utilisé la ligne ci-dessous en haut et le problème a été résolu.

@inherits System.Web.Mvc.WebViewPage
2
Rajan

Parfois c'est les bêtises. Vérifiez que vous ne faites pas quelque chose comme

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

ou

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

quand tu devrais faire

@Html.Sitecore().Placeholder("placeholdername") // this works
0
Paul George
  <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>
0
Chamara