需要量
我有一个项目,其中一个要求是加载外部小网站,如插件。 这个网站当然必须完成一些要求(比如mvc和网络版等,以使其兼容)。
此插件必须分配到我的MVC网站内的新文件夹中。在其中有Views文件夹和编译的网站DLL结果(控制器,模型,......)
当前发展
我实现了一个自定义 ViewEngine 来加载来自此文件夹的视图,以及一个 ControllerFactory ,它为不在我的主网站中的控制器提供了技巧。
我将我的代码基于http://christianjvella.com/wordpress/mef-mvc-defining-controllerfactory/用于ControllerFactory,Can I specify a custom location to "search for views" in ASP.NET MVC?用于ViewEngines
问题
所有似乎都适用于简单的html视图。但是,当我使用一些MVC助手或ViewBag,@ Url.Content,@ Html.DropDownList等对象时,我有一个错误,即该对象为null或不存在。
在ViewEngine中覆盖 CreateView 方法,它正确返回一个IView实例,controllerContext具有ViewBag和其他必要的功能。
似乎在视图渲染时,MVC没有附加controllerContext来查看实例...
这是MVC的限制,它不会将controllerContext传递给外部加载的视图或外部控制器吗?任何想法或解决方法?
答案 0 :(得分:2)
您的观点必须预编译。您可以使用预编译的MVC视图来执行此操作。 使用名为RazorGenerator的VS Addin创建预编译视图。
您可以在这里阅读更多相关内容,下面的示例将Views放在单独的类库中! ,你正在寻找一些东西:
答案 1 :(得分:0)
好吧,我忘了在插件视图文件夹中包含web.config,它工作正常,因为它定义了Razor和MVC dll引用。
全部谢谢
答案 2 :(得分:0)
您还可以使用VirtualPathProvider从其他程序集中提供服务,包括静态资源和视图。这样您就可以使用标准的ViewENgine
https://www.nuget.org/packages/EmbeddedResourceVirtualPathProvider/