2009-07-07 4 views
2

Ich habe eine ViewPage, in der ich ein externes Stylesheet angeben möchte. Das Stylesheet bezieht sich nur auf Elemente in ViewPage. Nach einigen erfolglosen Versuchen, ließ ich mich auf mit „Url.Content“ wie folgt:Besserer Ansatz für externe CSS in 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> 

Dies funktioniert während der Laufzeit in Ordnung, aber der Fehler „Die Klasse oder CssClass Wert definiert mich nicht“ von dem Visual Studio-Editor angezeigt . Ich vermute, dies liegt daran, dass Visual Studio das externe Stylesheet nicht auflösen kann, wenn ich "Url.Content" verwende.

Irgendwelche Gedanken zu einer Lösung, die die URL zur Laufzeit und erfolgreich auflösen wird machen Visual Studio glücklich?

Vielen Dank im Voraus.

Antwort

7

Ich würde nur Visual Studio ignorieren. Es ist ein großartiges Werkzeug, aber manchmal versucht es zu hart. Sind Sie sicher, dass es sich um einen Fehler oder eine Warnung handelt? Ich weiß, es ist eine schlechte Antwort, aber es ist was ich tue.

Wird es sich nicht über Stile beschweren, die einfach nur als jQuery-Futter verwendet werden?

Als Nebenwirkung, Sie könnten einen Html.Stylesheet Helfer schreiben wollen das Markup und URL-Analyse Verhalten zu kapseln, wie folgt dar: in dieser

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); 
} 

Resultierende, viel sauberer, Auszeichnungs:

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

Haben Sie versucht,

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

Ich bin nicht sicher, warum dies wurde markiert nach unten. Es funktioniert ohne VS-Warnungen und ohne zusätzlichen (unnötigen) Code. Es funktioniert auch für Bilder und js-Dateien. – blu

+0

-1: Ja, aber es hinterlässt uns CSS-Klassen Warnungen in der IDE. –

3

es ist eine seltsame Lösung, aber es funktioniert:

<!-- 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")%>" /> 

Sie können auch so etwas wie dies für jQuery Intellisense in Ihren Ansichten verwenden:

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

Danke. Das funktioniert. Aber das Microsoft Visual Studio-Team sollte wissen, dass diese Hackerei erforderlich ist, und sie sollten versuchen, das Problem * zu beheben *. –

Verwandte Themen