2010-01-20 4 views
11

J'ai une page maître dans/Vues/Partagé. La page maître référence une feuille de style dans le dossier /Content.ASP.NET MVC - Feuilles de style de référence dans la page maître

Tout fonctionne correctement si je référence la feuille de style en utilisant "../../Content/style.css". Cependant, mon application Web ne se trouve pas dans le dossier racine de notre environnement de production, de sorte que le chemin relatif ne fonctionne pas.

J'ai essayé "<% = ResolveUrl (" ~/content/style.css ")%>" qui fonctionne dans le scénario de production, mais le concepteur dans Visual Studio se plaint de l'erreur de mes classes (et je ne peut pas prévisualiser la page avec CSS dans l'onglet de conception).

Y a-t-il une solution qui rend ce travail dans les deux situations? J'ai accompli ceci dans WebForms en écrivant le code de côté de serveur qui a remis à zéro l'étiquette de lien. Je pourrais le faire ici, mais je voudrais l'éviter.

+0

* "mon application web n'est pas dans le dossier racine" * ... Un chemin relatif ne fait pas référence au dossier racine, donc je ne sais pas pourquoi cela aurait de l'importance. Êtes-vous sûr que votre dossier de contenu est dans le même emplacement ** relatif ** sur le serveur de production? –

+0

Le chemin relatif est le même dans la production et le développement. Le chemin relatif est correct lorsqu'il est relatif à la page maître. Toutefois, le chemin n'est pas relatif à la page qui utilise la page maître, qui est le chemin utilisé par le navigateur de l'utilisateur. –

Répondre

8

Essayez cette technique - incluez votre feuille de style tous les deux façons. Incluez-en un avec une référence de chemin d'accès fixe que Visual Studio utilisera pour la prise en charge au moment de la conception, mais placez-le dans les commentaires côté serveur afin qu'il ne soit pas réellement inclus pendant l'exécution. La deuxième référence est la référence "réelle" utilisée lors de l'exécution, et avec Url.Content() cela fonctionnera si votre application est un sous-répertoire ou non.

<% /* %> 
    <link href="../../Content/Site.css" rel="stylesheet" type="text/css" /> 
<% */ %> 

<link href="<%=Url.Content("~/Content/Site.css") %>" rel="stylesheet" 
     type="text/css" /> 
+0

+1 Technique intéressante! J'utiliserais T4MVC pour faire ça aussi. –

+0

J'aime cette idée. C'est une solution de rechange, mais elle répond aux deux exigences. Ce serait bien si le concepteur ASPX analysait le code côté serveur lors de la prévisualisation de la page. –

+0

Vous pouvez également rendre le lien statique runat = "server" visible = "false", ce qui est un peu plus simple. –

6

Il est recommandé d'utiliser Extend the URL Helper. Cela vous permet de l'appeler facilement à partir de votre vue, et si votre structure ou vos fichiers changent, vous n'avez pas besoin de faire une recherche/remplacement massive.

public static string Image(this UrlHelper helper, string fileName) 
{ 
    return helper.Content("~/Content/Images/" + fileName)); 
} 

public static string Stylesheet(this UrlHelper helper, string fileName) 
{ 
    return helper.Content("~/Content/Stylesheets/" + fileName); 
} 

public static string Script(this UrlHelper helper, string fileName) 
{ 
    return helper.Content("~/Content/Scripts/" + fileName); 
} 

    <link href="<%= UrlHelper.Stylesheet("Main.css")%>" rel="stylesheet" 
     type="text/css" /> 
+0

Pourquoi est-ce une bonne pratique? –

+0

afin que vous puissiez facilement le consulter dans votre vue, et si l'un de ces changements, vous n'avez pas à faire une recherche/remplacement. – Martin

+0

Je comprends votre point de vue, mais cela ne résout pas le problème du concepteur VS ne résolvant pas l'emplacement CSS. –

0

Dans le dossier Views, puis dans le dossier Shared, vous aidez à comprendre comment le fichier CSS est référencé dans le MVC.