2009-07-07 8 views
2

J'ai une ViewPage dans laquelle je voudrais spécifier une feuille de style externe. La feuille de style s'applique uniquement aux éléments de ViewPage. Après quelques tentatives infructueuses je me suis installé sur l'utilisation de « Url.Content » comme suit:Meilleure approche pour css externe dans ASP.NET MVC?

<asp:Content ID="cssLinkContent" ContentPlaceHolderID="CssLinkContent" runat="server"> 
    <link rel="stylesheet" type="text/css" href="<%= Url.Content("~/Content/custom.css")%>" /> 
</asp:Content> 

Cela fonctionne bien au moment de l'exécution, mais l'erreur « La classe ou la valeur CssClass n'est pas défini » est affiché par l'éditeur Visual Studio . Je suppose que c'est parce que Visual Studio ne peut pas résoudre la feuille de style externe lorsque j'utilise "Url.Content".

Les réflexions sur une solution qui résoudra avec succès l'URL au moment de l'exécution et rendent Visual Studio heureux?

Merci d'avance.

Répondre

7

Je voudrais simplement ignorer Visual Studio. C'est un excellent outil, mais parfois, il essaie de dur. Êtes-vous sûr que c'est une erreur ou un avertissement? Je sais que c'est une réponse succulente, mais c'est ce que je fais.

Ne se plaindra-t-il pas des styles utilisés simplement comme fourrage jQuery?

En aparté, vous voudrez peut-être écrire une aide de Html.Stylesheet pour encapsuler le comportement de l'analyse syntaxique de balisage et l'URL, comme suit:

public static string Stylesheet(this HtmlHelper Html, string url) { return Html.Stylesheet(url, null); } 
public static string Stylesheet(this HtmlHelper Html, string url, string media) 
{ 
    UrlHelper Url = new UrlHelper(new RequestContext(Html.ViewContext.HttpContext, Html.ViewContext.RouteData)); 
    string html = "<link type=\"text/css\" rel=\"stylesheet\" href=\"{0}\" {1}/>"; 
    if (!string.IsNullOrEmpty(media)) 
     media = "media=\"" + media + "\""; 

    return string.Format(html, Url.Content(url), media); 
} 

résultant dans ce domaine,, le balisage beaucoup plus propre:

<%= Html.Stylesheet("~/Content/custom.css") %> 
1

Avez-vous essayé

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

Je ne sais pas pourquoi cela a été marqué vers le bas. Il fonctionne sans avertissements VS et sans code supplémentaire (inutile). Il fonctionne également pour les images et les fichiers js. – blu

+0

-1: Oui, mais cela nous laisse des avertissements de classe CSS dans l'EDI. –

3

il est une solution bizarre, mais il fonctionne:

<!-- next line only for VS --> 
<% if(false) { %><script src="../../Content/custom.css" type="text/javascript"></script><% } %> 
<link rel="stylesheet" type="text/css" href="<%= Url.Content("~/Content/custom.css")%>" /> 

Vous pouvez également utiliser quelque chose comme ça pour jQuery IntelliSense dans vos Vues:

<% if(false) { %><script src="../../static/jquery/jquery-1.3.2-vsdoc2.js" type="text/javascript"></script><% } %> 
+0

Merci. Cela marche. Mais l'équipe Microsoft Visual Studio doit savoir que ce piratage est nécessaire et ils doivent s'efforcer de * résoudre * le problème. –

Questions connexes