asp.net mvc - 初始 GET 有效,后续请求导致“视图必须从 ViewPage 派生,...”错误
Posted
技术标签:
【中文标题】asp.net mvc - 初始 GET 有效,后续请求导致“视图必须从 ViewPage 派生,...”错误【英文标题】:asp.net mvc -- initial GET works, subsequent requests result in "view must derive from ViewPage,..." error 【发布时间】:2013-09-26 17:36:54 【问题描述】:我有一个包含 GET 请求子集的构建,这些请求可以在一个环境中工作,但不能在另一个环境中工作。更奇怪的是,他们确实在初始请求上工作,但对所有后续请求都一无所知。返回的错误是这个 badboy:
The view at '..' must derive from ViewPage, ViewPage<TModel>, ViewUserControl, or ViewUserControl<TModel>.
似乎几乎可以肯定是组件相互踩踏,但我无法理解它。构建之间的 bin 程序集(反过来,引用 System.Web.Mvc)发生了变化,但这并不能解释为什么一个环境有效而另一个环境无效。我也没有看到 GAC 的太大差异。
我并没有具体询问这个错误(它通常与不同步的 System.Web.Mvc 程序集有关),而是更多关于我看到的奇怪行为。
为什么初始请求会成功,但后续请求会失败并出现上述错误?
有没有其他人看到过类似的行为?
【问题讨论】:
你实现了自定义剃须刀视图类吗?也许您在某些区域这样做,但不是在站点的根目录中? 您是否指定了@model
,然后将null
传递给您的视图?
@Marko 正在进行一些自定义 ViewEngine 工作,但并不局限于网站的某些区域。
@BradChristie 不,不是那样的。就像我说的,具有完全相同的 GET 请求的完全相同的代码的行为会有所不同,具体取决于它运行的服务器。几乎很明显这是一个环境问题,但我无法追究。我觉得我在问题中描述的奇怪行为是对该问题的关键见解,但我迷路了。
@kdawg 我添加了我的答案,希望它可以帮助您解决这个问题...
【参考方案1】:
因此,根据您的回答,我假设您为执行自定义 ViewEngine 而编写的任何类都没有从应有的 ViewPage 类继承。如果您编写了这个的自定义实现,那么这个类必须从 ViewPage 和 ViewPage 继承,以防视图是强类型的。有关更多信息,请查看 Phil Haack 的这篇文章:
http://haacked.com/archive/2011/02/21/changing-base-type-of-a-razor-view.aspx
也可以看看这篇关于完全相同问题的帖子:
Getting the error "The view at '~/Views/Page/home.aspx' must derive from ViewPage, ViewPage<TViewData>, ViewUserControl, or ViewUserControl<TViewData>"
【讨论】:
感谢您的帮助,我会仔细检查我是否正确地处理 Haack 的帖子,但这些都不能解释:1)为什么它可以在一台服务器上工作,但不是另一个,也不是 2)为什么它在初始 GET 请求时成功呈现,但在重新加载时抛出错误。 哦,在使用 MvcDiagnostics.aspx 页面时,我发现程序集版本没有冲突。 事实上,在初始成功请求和失败请求之后的 MvcDiagnostics.aspx 输出的比较显示,所有已加载程序集的列表之间没有差异。 =/ 实际上,我的立场是正确的。存在细微差异(少数似乎是临时编译的视图程序集),但加载程序集的版本没有重大差异。 然后删除临时文件并重建,看看是否能解决问题。以上是关于asp.net mvc - 初始 GET 有效,后续请求导致“视图必须从 ViewPage 派生,...”错误的主要内容,如果未能解决你的问题,请参考以下文章