2009-08-28 62 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

相关问题