视图必须派生自 WebViewPage 或 WebViewPage<TModel>

Posted

技术标签:

【中文标题】视图必须派生自 WebViewPage 或 WebViewPage<TModel>【英文标题】:The view must derive from WebViewPage, or WebViewPage<TModel> 【发布时间】:2011-12-28 23:21:04 【问题描述】:

我正在关注 Justin Slattery's Plugin Architecture tutorial 并尝试将其调整为 Razor,而不是 WebForm 视图。

其他一切(控制器、插件程序集加载等)似乎都没问题。但是,我无法让嵌入式 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抛出的

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

谁能告诉我我可能做错了什么?

【问题讨论】:

【参考方案1】:

当我尝试将 MVC 脚手架(特别是 Views 文件夹)添加到 Web API 项目时出现此错误。 Darin Dimitrov's answer 说:

不再有 ~/Views/web.config 文件适用并允许您为剃刀视图指定基本类型

在 cmets 中,joelnet said:

我能够将 web.config 从 ~/Views 复制到我的备用位置以解决我的问题。

和Paul d'Aoust said:

如果您无法让@joelnet 评论中的解决方案发挥作用,请尝试清理并重建项目。

这些提示帮助我找到了解决方案。

首先,我将同一解决方案中另一个项目的Views 文件夹中的Web.config 复制到我的新Views 文件夹中。我重命名了主要的namespace 标签以匹配新项目,并在收到错误后删除了另一个我不需要的&lt;add namespace="..." /&gt;。然后我触发了一个构建(只是一个正常的构建,我不需要清理和重建),我能够毫无错误地加载我的新视图。

【讨论】:

【参考方案2】:

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

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

对不一致的行尾对话框单击“是”并发布 logon.cshtml 视图为我修复了它。

【讨论】:

【参考方案3】:

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

【讨论】:

我不相信 Microsoft.AspNet.WebPages 包在 4 年前可用于 ASP.NET MV3。 @Nasir,我真诚地问,即使问题仍然存在,*** 是否首选答案与发布时可用的技术有关? 我个人的看法是,如果你回答的是老问题,至少要承认在最初提出问题时提供的答案可能并不相关。否则,它要么是一个不知情的答案,要么是用户没有注意细节(日期是这些细节之一)。【参考方案4】:

今天刚将旧的 MVC3 项目更新到版本 4 时出现此错误,对我来说,解决方案是删除 &lt;assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"&gt; 部分中的属性 appliesTo="v2.0.50727"

【讨论】:

【参考方案5】:

我遇到了同样的问题,因为我没有提交包含 razor 库的 packages 文件夹。然后我添加了包,它可以工作,但是在重建时它坏了。然后我在构建时关闭了 nuget 自动运行,现在它工作正常。 就我而言,nuget 把事情搞砸了。

【讨论】:

【参考方案6】:

注意:我遇到了一个非常相似的问题,最后不得不追查我是唯一一个在他们的解决方案中链接了 MVC 4.0.0.0 的开发人员。

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

TL;DR确保您的参考资料与您的开发小组的其他成员相同。

【讨论】:

【参考方案7】:

您可以查看更适合 Razor 的 following blog post。

但要回答您的问题,由于您现在从非标准位置提供视图,因此不再有适用的 ~/Views/web.config 文件并允许您为剃刀视图指定基本类型。因此,您可能需要在每个剃刀视图的顶部添加以下内容:

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

【讨论】:

感谢您提供这两条信息。我会看看你提到的博客。 我能够将 web.config 从 ~/Views 复制到我的备用位置以解决我的问题。谢谢。 @Darin Dimitrov 我也有类似的问题。当我尝试添加@inherits 时,我收到一条错误消息,提示我不能同时使用@inherits@model。你能帮忙吗?编辑。我正在使用 mvc4 如果您无法让@joelnet 评论中的解决方案发挥作用,请尝试清理并重建项目。 @DarinDimitrov:我创建了一个示例应用程序,并在共享文件夹中创建了一个 View sampleView.html 用于发送电子邮件。我遇到了上面的崩溃并使用了上面的代码,现在它说错误使用'model'关键字时不允许使用'inherits'关键字。

以上是关于视图必须派生自 WebViewPage 或 WebViewPage<TModel>的主要内容,如果未能解决你的问题,请参考以下文章

django 崩溃:异常必须是旧式类或派生自 BaseException,而不是 str

vs视图引入命名空间设置方法

对于泛型+非泛型,是不是/为啥需要从两次继承 WebViewPage?

asp.net mvc - 初始 GET 有效,后续请求导致“视图必须从 ViewPage 派生,...”错误

基类 派生类 类的继承与约束

拥有所有实体派生自的 BaseEntity 类型或接口会更好吗?