2009-08-28 10 views
4

Можно ли просмотреть ViewEngine для поиска частично общих представлений в дополнительных папках для указанных контроллеров (в то время как NOT для других)?Как группировать частичные общие представления для указанных контроллеров?

Я использую 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 –

+0

Теперь просто нужно настроить его с помощью фильтра для контроллеров - что-то вроде [AddPartialViewLocation («Shared/SuperFolder»)]. Как вы думаете - это хорошая/плохая идея? –

+0

Я бы, вероятно, использовал IDictionary >. Затем вы можете получить перечислимый список путей для проверки любого произвольного количества типов контроллеров. В приведенном выше методе будет проверяться, находится ли текущий тип контроллера в словаре (w/TryGetValue), а затем проверять пути для этого типа, если он найден. –

 Смежные вопросы

  • Нет связанных вопросов^_^