【问题标题】:MVC 5 Custom ViewEngine to Load External Controllers and ViewsMVC 5 自定义 ViewEngine 加载外部控制器和视图
【发布时间】:2014-08-07 18:33:49
【问题描述】:

要求

我有一个项目,其中一项要求是加载外部小型网站,例如插件。 当然,这个网站必须满足一些要求(如 mvc 和 net 版本等以使其兼容)。

此插件必须分配在我的 MVC 网站内的新文件夹中。其中有 Views 文件夹和编译的网站 dll 结果(控制器,模型,...)

目前的发展

我实现了一个自定义 ViewEngine 以从该文件夹加载视图,并实现了一个 ControllerFactory,它为不在我的主网站中的控制器提供了技巧。

我的代码基于http://christianjvella.com/wordpress/mef-mvc-defining-controllerfactory/ for ControllerFactory 和Can I specify a custom location to "search for views" in ASP.NET MVC? for ViewEngines

问题

一切似乎都适用于简单的 html 视图。但是,当我使用一些 MVC 帮助程序或 ViewBag、@Url.Content、@Html.DropDownList 等对象时,我有一个错误,即该对象为空或不存在。

重写ViewEngine中的CreateView方法,正确返回一个IView实例,controllerContext具备ViewBag等必要功能。

看起来,在视图渲染的那一刻,MVC 没有将 controllerContext 附加到视图实例......

这是不将 controllerContext 传递给外部加载的视图或外部控制器的 MVC 的限制吗?有什么想法或解决方法吗?

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-5 external viewengine


    【解决方案1】:

    您的视图必须经过预编译。您可以使用预编译的 MVC 视图来执行此操作。 预编译视图是使用名为 RazorGenerator 的 VS 插件创建的。

    您可以在此处阅读更多信息,下面的示例将视图放在单独的类库中! ,你正在寻找的东西:

    http://www.c-sharpcorner.com/UploadFile/97fc7a/article-precompiled-razor-view-using-razorgenerator-mvc-and/

    【讨论】:

      【解决方案2】:

      好吧,我忘记在 plugins Views 文件夹中包含 web.config,因为它定义了 Razor 和 MVC dll 引用,所以它工作正常。

      谢谢大家

      【讨论】:

      • 你能详细说明一下吗,例如提供更多细节?为您自己的问题提供完整而详细的答案并没有错。我很乐意为这个答案投票。
      【解决方案3】:

      您还可以使用 VirtualPathProvider 为其他程序集提供服务,包括静态资产和视图。这样您就可以使用标准的 ViewENGine

      https://www.nuget.org/packages/EmbeddedResourceVirtualPathProvider/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-23
        • 2019-09-14
        • 1970-01-01
        • 2017-01-30
        • 1970-01-01
        • 2016-01-24
        相关资源
        最近更新 更多