2013-01-31 45 views
0

我有两个使用相同视图的asp.net MVC 3 web项目,我想将这些视图放在一个包含常见项目的Web项目中控制器,actionfilters,扩展方法等等(这两个项目上方的项目文件夹)。Asp.net定制剃须刀视图引擎开箱即用访问视图

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

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项目中拿出来?有没有解决方案可以避免将视图编译成主要的通用Web项目?

在此先感谢。

何塞。

回答

0

是否有避免将视图编译成主要通用Web项目的解决方案?

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

相关问题