【问题标题】:Set razor view path to a external folder将剃刀视图路径设置为外部文件夹
【发布时间】:2015-03-21 22:24:25
【问题描述】:

目前我们使用带有 razorgenerator 的插件。这工作正常,但是当需要编辑视图时,每次都需要编译它。这使我们的生产力低于预期。我正在开发一个自定义剃须刀视图引擎来解决这个问题。为了让它工作,我需要将该区域的视图设置为本地目录。

我试过了

public class PluginRazorViewEngine : RazorViewEngine
{
    public PluginRazorViewEngine()
    {
       var x = this.AreaViewLocationFormats.ToList();
        x.Insert(0, "C:/XXXXX/Areas/Module/Views/{1}/{0}.cshtml");
        this.AreaViewLocationFormats = x.ToArray();
     }
 }

虽然这给出了错误:

   The relative virtual path 'C:/XXXXX/Areas/Module/Views/Items/Index.cshtml' is not allowed here.

是否可以在项目之外设置视图路径?

【问题讨论】:

    标签: asp.net asp.net-mvc razor razorengine


    【解决方案1】:

    我无法找到引发错误的确切位置,但我相信您无法按照您尝试的方式在应用程序之外设置路径。 RazorViewEngine 继承自 BuildManagerViewEngine,而 BuildManagerViewEngine 又继承自 VirtualPathProviderViewEngineVirtualPathProviderViewEngine 使用宿主环境的VirtualPathProvider
    因此,您似乎不能使用直接路径,并且需要传入虚拟路径,或者您可以通过直接从 IViewEngine 继承来自己重写底层层,VirtualPathProviderViewEngine 继承自 VirtualPathProviderViewEngine(见下图)。

    我可能弄错了,但我也相信这是在执行与指定 here 相同的原则,即您不能从站点路径之外传递内容。

    您是否尝试过使用相对路径来查看是否正确映射。一个依赖于application's root的相对路径?

    查看VirtualPathProviderViewEngine 的源代码,您还会注意到VirtualPathProvider 类的FileExists 方法被广泛用于查找请求的剃刀文件。

    继承图来源:http://theshravan.net/blog/configure-the-views-search-locations-in-asp-net-mvc/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-28
      • 2023-04-09
      • 2011-10-10
      • 2018-04-24
      • 2014-10-07
      • 2011-11-25
      相关资源
      最近更新 更多