2010-08-03 4 views
1

Dans mon application, j'ai un appel de zone Mobile. Dans ce domaine, j'ai un dossier appelé Assets où nous plaçons tous nos css, javascript et images.Impossible d'utiliser des chemins relatifs avec des zones dans ASP.NET MVC 2

Accéder aux vues fonctionne très bien. http://localhost/webapp/mobile/stuff

Le problème est lorsque j'accède à mes css, javascript et images.

Je ne peux pas faire quelque chose comme ça à mon avis.

<img src="Assets/css/styles.css" /> 

La raison est parce que l'URL réelle est: http://localhost/webapp/areas/mobile/assets/css/styles.css

est-il un moyen de la carte à http://localhost/webapp/areas/mobilehttp://localhost/webapp/mobile pour les fichiers statiques?

Merci, Randall

Répondre

3

La solution que j'ai trouvée était d'utiliser un IHTTPModule simple, qui réécrirait les urls pour moi. Voici la méthode que j'ai implémentée pour l'événement BeginRequest.

void BeginRequest(object sender, EventArgs e) 
{ 
    var context = HttpContext.Current; 
    var path = context.Request.Path; 

    // Add Areas to the Mobile path, so we don't have to specify it manually. 
    // This is mainly for handling static resources that you place in areas. 
    if (!path.Contains("Mobile/")) return; 
    if (path.EndsWith(".png") || 
     path.EndsWith(".gif") || 
     path.EndsWith(".css") || 
     path.EndsWith(".js") || 
     path.EndsWith(".htm") || 
     path.EndsWith(".cache")) 
     context.RewritePath(path.Replace("Mobile/", "Areas/Mobile/")); 
} 
1

Vous devez sans doute faire quelque chose comme ceci:

<img src="../../Mobile/Assets/css/styles.css" /> 

... selon l'endroit où votre répertoire courant est en réalité. Vous pouvez également essayer quelque chose comme:

<img src="~Mobile/Assets/css/styles.css" /> 

Une bonne façon de savoir ce que le chemin réel devrait être est de faire glisser l'actif (dans ce cas styles.css) de l'Explorateur de projets à votre point de vue, et que visuelle Studio crée le chemin pour vous.

Questions connexes