使用自定义VirtualPathProvider加载继承自自定义WebViewPage的嵌入式视图

4

类似于这个问题,我正在使用自定义的VirtualPathProvider来检索嵌入在dll中的视图。如果我在我的视图上不加@inherits System.Web.Mvc.WebViewPage就会出现以下错误:

The view at '~/Views/Home/Index.cshtml' must derive from ViewPage, ViewPage<TModel>, ViewUserControl, or ViewUserControl<TModel>.

我正在使用一个自定义的BaseViewPage,它继承自WebViewPage。在我开始使用这个自定义VirtualPathProvider之前,将新的基础页面设置在web.config中是有效的。现在,如果我尝试在页面上继承我的自定义类@inherits My.BaseViewPage,我会得到与上面相同的错误。
为了完整起见,我需要补充说明,如果我从WebViewPage继承,页面确实开始编译,但它会抛出一个错误,因为有代码期望视图具有来自BaseViewPage的属性。
2个回答

2
事实证明,问题与我使用的视图引擎有关。为了让VirtualPathProvider正常工作,我用自定义的视图引擎取代了原来的视图引擎,并添加了所需的视图位置。我不小心继承了WebFormsViewEngine而不是RazorViewEngine,这就是为什么我一直收到ViewPage而不是WebViewPage的错误提示。现在这一切都解决了,我的自定义基础视图页面可以正常工作了。

啊 - 很高兴我找到了这个答案! :) - Karan

1

嗯...可能是基类无法从您的dll中正确解析导致失败了吗?

如果是这种情况,您需要做的是在...(从内存中获取)AppDomain.AssemblyResolve上添加自定义程序集/类型解析器处理程序 - 在该处理程序中,您将想要从您的dll中获取适当的类型并将其返回。

很遗憾,这只是一个猜测 - 我正在使用手机,因此研究能力有限。


感谢您的回答。我差点就这么做了,但是解决方案结果只是一个简单的 PEBKAC 实例。 - ashanan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接