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

时间:2012-06-12 21:44:15

标签: .net asp.net-mvc virtualpathprovider

this question类似,我使用自定义VirtualPathProvider来检索嵌入在dll中的视图。如果我没有将@inherits System.Web.Mvc.WebViewPage放在我的观点上,我会收到此错误:

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

我使用的是继承自WebViewPage的自定义BaseViewPage。在我开始使用此自定义VirtualPathProvider之前,在web.config中设置新的基页是有效的。现在,如果我尝试使用@inherits My.BaseViewPage在页面上继承我的自定义类,我会得到与上面相同的错误。

为了完整性&#39;我要补充一点,如果我从WebViewPage继承,页面会开始编译,但它会抛出一个错误,因为有代码期望视图具有BaseViewPage的属性。

2 个答案:

答案 0 :(得分:2)

事实证明问题与我正在使用的视图引擎有关。为了使VirtualPathProvider正常工作,我将视图引擎替换为添加了我需要的视图位置的自定义引擎。我不小心继承了WebFormsViewEngine而不是RazorViewEngine,这就是为什么我一直得到的错误是ViewPage而不是WebViewPage。现在已经整理好我的自定义基本视图页面就可以了。

答案 1 :(得分:1)

嗯......基类是否有可能无法从你的dll中正确解析?

如果是这种情况,您需要做的是在...上添加自定义程序集/类型解析程序处理程序(从内存中去)AppDomain.AssemblyResolve - 在该处理程序中,您需要从中获取相应的类型你的dll然后返回。

不幸的是,在我的手机上猜测,所以研究能力有限。