该视图必须从WebViewPage或WebViewPage <TModel>派生

我遵循贾斯汀Slattery的插件架构教程,并尝试适应Razor,而不是WebForm视图。

其他一切(控制器,插件程序集等)似乎都没问题。 但是,我无法使embedded的Razor视图正常工作。 当我尝试浏览到“HelloWorld / Index”时,出现以下错误:

The view at '~/Plugins/MyProjectPlugin.dll/MyProjectPlugin.Views.HelloWorld.Index.cshtml' must derive from WebViewPage or WebViewPage<TModel>. 

System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) +262引发exceptionSystem.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) +262

如果需要,我可以包含完整的堆栈跟踪。

任何人都可以build议我可能做错了什么?

您可以检出以下更适合Razor的博客文章 。

但是为了回答你的问题,因为你现在正在从一个非标准的位置提供视图,所以不再需要应用~/Views/web.config文件,并且允许你指定你的razor视图的基本types。 因此,您可能需要在每个razor视图的顶部添加以下内容:

 @inherits System.Web.Mvc.WebViewPage @model ... 

注:我有一个非常类似的问题,并不得不终于追查到,我是唯一的MVC 4.0.0.0开发人员在他们的解决scheme链接。

其他人都正确地引用了3.0.0.0,并且正在构build/运行,没有错误。

TL; DR确保您的引用与开发组的其他部分相同。

我有一个相同的问题,因为我没有提交包含剃刀库的包文件夹。 然后我添加了包,它的工作,但重build时,它打破了。 然后closuresnuget自动运行,现在它工作正常。 在我的情况下,nuget搞砸了。

刚刚得到这个错误,当更新一个旧的MVC3项目到版本4,对我来说,解决scheme是删除<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">中的属性appliesTo="v2.0.50727" <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">部分。

我想分享我的痛苦..网站本地工作正常,但是当我发布到客户的IIS,它是抛出这个错误。 所有的web.config文件(root和/ Views)与网站的工作副本完全匹配。

其中一个视图(logon.cshtml)有不一致的行结尾,我没有点击yes来修复它在我的Windows机器上。

点击是不一致的行结束对话框,并发布logon.cshtml视图为我修复它。

当我试图添加MVC脚手架(特别是Views文件夹)到一个Web API项目时,我得到了这个错误。 达林·季米特洛夫的回答是:

不再有适用的~/Views/web.config文件,并且允许您指定razor视图的基本types

在对这个答案的评论中, joelnet说 :

我能够将〜/ Views中的web.config复制到我的备用位置来解决我的问题。

保罗·奥斯特说 :

如果您在使用@ joelnet的评论中解决问题时遇到问题,请尝试清理并重build项目。

这些提示帮助我找出解决办法。

首先,我从同一个解决scheme中另一个项目的Views文件夹复制Web.config到我的新的Views文件夹。 我将主namespace标记重namespace为与新项目相匹配,并且在得到错误之后移除了另一个不需要的<add namespace="..." /> 。 然后,我触发了一个构build(只有一个正常的构build,我不需要清理和重build),我能够加载我的新视图没有错误。

安装软件包:Install-Package Microsoft.AspNet.WebPages