视图必须派生自 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
标签以匹配新项目,并在收到错误后删除了另一个我不需要的<add namespace="..." />
。然后我触发了一个构建(只是一个正常的构建,我不需要清理和重建),我能够毫无错误地加载我的新视图。
【讨论】:
【参考方案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 时出现此错误,对我来说,解决方案是删除 <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
部分中的属性 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
对于泛型+非泛型,是不是/为啥需要从两次继承 WebViewPage?