【问题标题】:Can I interleave two MVC view engines when searching for views?搜索视图时可以交错两个 MVC 视图引擎吗?
【发布时间】:2011-12-12 21:08:22
【问题描述】:

我在我的 MVC 项目中使用 WebForms 和 Razor 视图引擎。他们一起工作得很好。但是,我设置了一个基于继承的项目,因此我有多个从基础项目派生的子项目。只有一个视图引擎,这样 MVC 将在子项目中搜索视图,如果找不到,它将搜索基础。

但是,当添加第二个视图引擎时,这种搜索模式就被打破了,WebForms 引擎先搜索子元素然后搜索基数,然后 Razor 引擎搜索子元素再搜索基数。因此,基本 .aspx 视图将优先于子 .cshtml 视图。换句话说,当搜索名为 MyView 的视图时,这是搜索位置的优先列表:

Child\MyView.aspx
Base\MyView.aspx
Child\MyView.cshtml
Base\MyView.cshtml

我想要的是让两个引擎在检查基础项目之前分别检查子项目,例如:

Child\MyView.aspx
Child\MyView.cshtml
Base\MyView.aspx
Base\MyView.cshtml

这可能吗,如果可以,有人能指出我正确的方向吗?

【问题讨论】:

    标签: asp.net-mvc-3 razor webforms viewengine


    【解决方案1】:

    您可以编写自己的视图引擎,在内部使用两个现有的视图引擎。

    public InterleavedViewEngine : IViewEngine
    {
        public string[] SearchLocations;
    
        RazorViewEngine _razor;
        WebFormsViewEngine _webForms;
    
        public override ViewEngineResult FindView(...)
        {
            //iterate search paths, trying Razor, then WebForms, etc...
            foreach(var location in SearchLocations)
            {
                var razorResult = _razor.FindView(...);
    
                if(razorResult.View == null)
                {
                   //web forms, etc... here
                }
    
            }
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-13
      • 2010-11-29
      • 1970-01-01
      相关资源
      最近更新 更多