【问题标题】:How to use relative virtual path in custom razor view engine如何在自定义剃须刀视图引擎中使用相对虚拟路径
【发布时间】:2018-08-12 17:29:26
【问题描述】:

我正在使用带有重写 MasterLocationFormats 的自定义剃须刀视图引擎。我想为搜索视图和母版页提供相对虚拟路径位置。

如何做到这一点?

 public class ExampleRazorViewEngine : RazorViewEngine
{
    /// <summary>
    /// Initializes a new instance of the <see cref="ExampleRazorViewEngine"/> class.
    /// </summary>
    public ExampleRazorViewEngine()
    {

        ViewLocationFormats = new string[] {

             "../../../Views/{1}/{0}.cshtml",
           };
        MasterLocationFormats = new string[] {
             "../../../Views/{1}/{0}.cshtml",
             };
        PartialViewLocationFormats = new string[] {
             "../../../Views/{1}/{0}.cshtml",
             };
        FileExtensions = new string[] { "cshtml" };            

    }

执行此操作时会出现以下错误。 相对虚拟路径....这里不允许

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-mvc-4 razor


    【解决方案1】:

    假设您想在项目目录的 Plugins 文件夹中加载视图文件。那么你的代码看起来像下面的例子。

    示例:

    public class PluginViewEngine : RazorViewEngine
    {
        private List<string> _plugins = new List<string>();
        public PluginViewEngine()
        {
            var plugins = Directory.GetDirectories(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Plugins")).ToList();
               //Load your directory
            plugins.ForEach(s =>
            {
                var di = new DirectoryInfo(s);
                _plugins.Add(di.Name);
            });
    
            ViewLocationFormats = GetViewLocations();
            MasterLocationFormats = GetMasterLocations();
            PartialViewLocationFormats = GetViewLocations();
    
        }
        public string[] GetViewLocations()
        {
            var views = new List<string> {
                "~/Views/{1}/{0}.cshtml"
                 };
    
            _plugins.ForEach(plugin =>
                views.Add("~/Plugins/" + plugin + "/Views/{1}/{0}.cshtml")
            );   //Load your view
    
            return views.ToArray();
        }
    
        public string[] GetMasterLocations()
        {
            var masterPages = new List<string> {
                "~/Views/Shared/{0}.cshtml"
                };                
            _plugins.ForEach(plugin =>
                masterPages.Add("~/Plugins/" + plugin + "/Views/Shared/{0}.cshtml")
            );//Load your view
    
            return masterPages.ToArray();
        }
    }
    

    【讨论】:

    • 这正是我不想做的。我已经有你上面提到的代码的工作示例,但是放置视图/文件的位置不在项目目录中或在任何目录中其他驱动器。这可能吗?
    • @RonnieKapoor 请提及视图/文件的放置位置不在项目目录或任何其他驱动器中。这可能吗? 在您的问题中。这有助于理解任何人。
    • @RonnieKapoor 我更新了我的答案。我不知道这是否可能。但你可以从中得到一个想法。
    猜你喜欢
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 2011-04-07
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多