2011-10-21 28 views
1

我在我的MVC項目中使用WebForms和Razor視圖引擎。他們一起工作很好。但是,我有一個基於繼承的項目,因此我有多個從基礎項目派生的子項目。只有一個視圖引擎,這會使MVC在子項目中搜索一個視圖,並且無法找到它,它會搜索基礎。可以在搜索視圖時交錯兩個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 

這是可能的,如果有的話,有人能指出我的方向是正確的嗎?

回答

0

你可以編寫自己的視圖引擎,在內部使用兩個現有的視圖引擎。

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 
      } 

     } 
    } 

} 
相關問題