2009-08-28 10 views
4

Est-il possible de dire à ViewEngine de rechercher des vues partagées partielles dans des dossiers supplémentaires pour les contrôleurs spécifiés (tandis que PAS pour les autres)?Comment grouper des vues partagées partielles pour des contrôleurs spécifiés?

J'utilise WebFormViewEngine.

C'est ainsi que mon PartialViewLocations regarde le moment.

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

Répondre

2

Sûr. Ne modifiez pas PartialViewLocationFormats dans ce cas; à la place, faites:

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

Je t'aime! : D –

+0

Maintenant, il suffit de modifier ceci avec un filtre pour les contrôleurs - quelque chose comme [AddPartialViewLocation ("Shared/SuperFolder")]. Comment pensez-vous - c'est une bonne/mauvaise idée? –

+0

J'utiliserais probablement un IDictionary >. Vous pouvez ensuite obtenir une liste énumérable de chemins à rechercher pour un nombre arbitraire de types de contrôleurs. La méthode ci-dessus vérifiera si le type de contrôleur actuel est dans le dictionnaire (w/TryGetValue), puis sonder les chemins pour ce type dans l'ordre si trouvé. –

Questions connexes