当我使用@Html.Sitecore
:
'System.Web.Webpages.Html.Htmlhelper'不包含'Sitecore'的定义,并且最好的扩展方法重载'Sitecore.Mvc.HtmlHelperExtensions.Sitecore(System.Web.Mvc.HtmlHelper)'有一些无效arguments.`
然而,一旦部署,它确实运行没有任何问题。
我正在使用Sitecore 7.2和MVC 5.1。
我读过的文章涉及类似的错误消息,请谈谈system.web.webPages.razor
文件夹Views
文件的web.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>
另外,在查看visual studio的输出时,还有一个我之前未发现的错误:
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
这个问题现在有很多答案。我建议尝试每一个,因为似乎有很多原因可能会发生此错误。
答案 0 :(得分:16)
我前一段时间遇到同样的问题。我们发现我们在/ views文件夹中缺少web.config。我们从其他项目的/ views中复制了一个web.config,它解决了这个问题。
答案 1 :(得分:13)
试试这个,然后尝试重新启动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中将其取出。
答案 2 :(得分:4)
我现在已经解决了这个问题。我只需要安装Visual Studio 2013的Update 2.多么令人沮丧。
感谢StriplingWarrior和Ahmed Okour的有用建议。
答案 3 :(得分: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>
答案 4 :(得分:2)
我在顶部使用了以下行,问题已经解决。
@inherits System.Web.Mvc.WebViewPage
答案 5 :(得分:0)
有时它是愚蠢的事情。检查你没有做类似
的事情@Html.Sitecore("placeholdername") // no method
或
@Html.Sitcore.Placeholder("placeholdername") // Missing parenthesis
你应该做什么
@Html.Sitecore().Placeholder("placeholdername") // this works
答案 6 :(得分:0)
<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>
答案 7 :(得分:-1)
我在引用中添加了Sitecore.Mvc dll,其中copy local为true,并在视图的websconfig下添加了以下标记,然后我的问题得到了解决。