【问题标题】:Asp.net custom razor view engine for access views out of the boxAsp.net 自定义剃须刀视图引擎,用于访问开箱即用的视图
【发布时间】:2013-01-31 22:16:50
【问题描述】:

我有两个使用相同视图的 asp.net MVC 3 Web 项目,我想将这些视图放在一个 Web 项目中,该项目包含控制器、操作过滤器、扩展方法等常见项目......(项目这两个项目上方的文件夹)。

我创建了这个自定义视图引擎来修改视图和局部视图、位置。

public class GenericViewEngine : RazorViewEngine
    {
        public GenericViewEngine(): this(null)
        { }
        public GenericViewEngine(IViewPageActivator viewPageActivator)
        {
            base.ViewLocationFormats = new string[] { "~/Views/{1}/{0}.cshtml", "~/../Framework.Web/Views/{1}/{0}.cshtml", "~/Views/Shared/{0}.cshtml", "~/../Framework.Web/Views/Shared/{0}.cshtml"  };
            base.MasterLocationFormats = new string[] { "~/Views/{1}/{0}.cshtml", "~/../Framework.Web/Views/{1}/{0}.cshtml", "~/Views/Shared/{0}.cshtml", "~/../Framework.Web/Views/Shared/{0}.cshtml"  };
            base.PartialViewLocationFormats = new string[] { "~/Views/{1}/{0}.cshtml", "~/../Framework.Web/Views/{1}/{0}.cshtml", "~/Views/Shared/{0}.cshtml", "~/../Framework.Web/Views/Shared/{0}.cshtml" };
            base.FileExtensions = new string[] { "cshtml" };
        }
        protected override IView CreatePartialView (ControllerContext controllerContext, string partialPath)
        {
            return base.CreatePartialView(controllerContext, partialPath);
        }
        protected override IView CreateView (ControllerContext controllerContext, string viewPath, string masterPath)
        {
            return base.CreateView(controllerContext, viewPath, masterPath);

        }
    }

我收到一个异常提示:无法使用前导 .. 退出顶级目录。

我怎样才能把这两个项目的共同观点从每个网络项目中拿出来?有什么解决方案可以避免将视图编译到主要的公共 Web 项目中?

提前致谢。

何塞。

【问题讨论】:

    标签: asp.net-mvc-3


    【解决方案1】:

    有没有办法避免将视图编译到主要的公共网络项目中?

    是的,您可以将它们作为资源嵌入到一些插件程序集中,并在多个项目中重复使用它们。为此,您必须编写一个自定义 VirtualPathProvider,它能够从当前应用程序之外的非标准位置加载视图。你也可以看看RazorGenerator project。这是accompanying blog post 解释了一些必需的步骤。基本上,您需要安装 Razor Generator Extension,它将预编译您的 Razor 视图作为您可以在 MVC 应用程序中引用的类库的一部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-12
      • 1970-01-01
      • 1970-01-01
      • 2011-04-07
      • 1970-01-01
      相关资源
      最近更新 更多