ASP.NET MVC中外部css的更好方法?

时间:2009-07-07 19:34:26

标签: asp.net-mvc css

我有一个ViewPage,我想在其中指定一个外部样式表。样式表仅适用于ViewPage中的元素。经过一些不成功的尝试后,我决定使用“Url.Content”,如下所示:

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

这在运行时工作正常,但Visual Studio编辑器显示错误“未定义类或CssClass值”。我认为这是因为当我使用“Url.Content”时,Visual Studio无法解析外部样式表。

有关在运行时成功解析URL的解决方案的任何想法都会让Visual Studio感到高兴吗?

提前致谢。

3 个答案:

答案 0 :(得分:7)

我会忽略Visual Studio。这是一个很好的工具,但有时它会努力。您确定是错误还是警告?我知道这是一个很好的答案,但这就是我所做的。

它不会抱怨仅仅用作jQuery饲料的样式吗?

顺便说一句,您可能希望编写一个Html.Stylesheet帮助程序来封装标记和URL解析行为,如下所示:

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

导致这个更清晰的标记:

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

答案 1 :(得分:3)

这是一个奇怪的解决方案,但它有效:

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

你也可以在你的视图中使用类似的东西来实现jQuery intellisense:

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

答案 2 :(得分:1)

你试过吗

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