2009-03-12 8 views
1

J'ai une application qui est déployée dans plusieurs pays. Il y aura un paramètre dans le fichier web.config, qui définit le pays. Le pays ne figurera pas dans l'URL.Modifier la règle de recherche pour les vues

Certaines des vues changent en fonction du pays. Ma première tentative est d'utiliser un dossier dans le dossier de vues qui contient des vues, si elles diffèrent de la vue par défaut:

Par défaut

/questions/ask.aspx

Espagne

/questions/ESP/ask.aspx

S'il n'y a pas de vue dans le dossier de pays, la vue par défaut est utilisé. Existe-t-il un moyen d'étendre ViewEngine pour rechercher des vues dans le dossier de pays en premier?

EDIT:

Ceci est un poc seulement. Pour voir une mise en œuvre complète jeter un oeil à

http://pietschsoft.com/?tag=/mvc

 private static string[] LocalViewFormats = 

     new string[] { 
      "~/Views/{1}/ESP/{0}.aspx", 
     "~/Views/{1}/{0}.aspx", 
     "~/Views/{1}/{0}.ascx", 
     "~/Views/Shared/{0}.aspx", 
     "~/Views/Shared/{0}.ascx" 
    }; 

     public LocalizationWebFormViewEngine() 
     {  
     ViewLocationFormats = LocalViewFormats; 
    } 

Répondre

2
public class MyViewEngine : WebFormViewEngine 
{ 
    private static string[] LocalViewFormats = new[] { "~/Views/ESP/{0}.aspx", 
                  "~/Views/ESP/{0}.ascx" }; 
    public MyViewEngine() 
    { 
     ViewLocationFormats = LocalViewFormats.Union(ViewLocationFormats).ToArray(); 
    } 
} 

De toute évidence, vous ne voulez pas coder en dur l'emplacement, mais cela devrait vous donner l'idée générale.

+0

Cela a fonctionné. Mais qu'entendez-vous par "Union"? –

+0

C'est une méthode d'extension dans System.Linq –

+0

où mettez-vous ce code? J'ai essayé ceci avec mes vues de rasoir et cela n'a pas fonctionné. Le code est-il différent pour MVC3 avec le moteur de vue Razor? (@Leon a demandé) – jjnguy

Questions connexes