2009-08-28 49 views
4

是否有可能告訴ViewEngine在指定控制器的其他文件夾中查找部分共享視圖(而其他人使用而不是)?如何爲指定控制器分組部分共享視圖?

我正在使用WebFormViewEngine。

這就是我的PartialViewLocations現在的樣子。

public class ViewEngine : WebFormViewEngine 
    { 
     public ViewEngine() 
     { 
      PartialViewLocationFormats = PartialViewLocationFormats 
       .Union(new[] 
         { 
          "~/Views/{1}/Partial/{0}.ascx", 
          "~/Views/Shared/Partial/{0}.ascx" 
         }).ToArray(); 
     } 

回答

2

當然可以。在這種情況下不要更改PartialViewLocationFormats;取而代之的是:

public override ViewEngineResult FindPartialView(
     ControllerContext controllerContext, 
     string partialViewName, 
     bool useCache) 
    { 
     ViewEngineResult result = null; 

     if (controllerContext.Controller.GetType() == typeof(SpecialController)) 
     { 
      result = base.FindPartialView(
       controllerContext, "Partial/" + partialViewName, useCache); 
     } 

     //Fall back to default search path if no other view has been selected 
     if (result == null || result.View == null) 
     { 
      result = base.FindPartialView(
       controllerContext, partialViewName, useCache); 
     } 

     return result; 
    } 
+1

我愛你! :D – 2009-08-28 12:30:30

+0

現在只需要調整控制器的過濾器 - 像[AddPartialViewLocation(「Shared/SuperFolder」)]。你覺得怎麼樣 - 這是個好主意? – 2009-08-28 12:38:30

+0

我可能會使用一個IDictionary <類型,IEnumerable >。然後你可以得到一個可枚舉的路徑列表來探測任意數量的控制器類型。上面的方法將檢查當前的控制器類型是否在字典中(w/TryGetValue),然後如果找到,則按順序探測該類型的路徑。 – 2009-08-28 12:44:34

相關問題