为什么我的动态样式表网址无法在MVC中运行?

时间:2015-08-06 08:43:24

标签: c# css asp.net-mvc

这在昨天工作,我必须在某些时候改变了一些东西,但样式表的url路径不再适用于以下代码:

@section Styles {
    @{
        string path = Url.Content("~") + Model.CssPath;
        <link href="path" rel="stylesheet" type="text/css" />
    }
}

当我向页面写出“路径”时,它是//Content/site.css。如果我浏览http://localhost:59278/Content/site.css,它就可以了。但是,链接路径正在查看http://Content/site.css

为什么?

2 个答案:

答案 0 :(得分:1)

使用时:

Url.Content("~")

它为您提供了网站的根路径,始终以/ 结尾。

在这种情况下,它是&#39; /&#39;因为您的本地服务器没有任何子路径。当您部署到另一台服务器时,它可能是&#34; / MySite / SubPath / etc /&#34; (仍然以&#39; /&#39;)结束。

正如评论中所述,Model.CssPath是&#34; /Content/site.css"

所以本地就是:

"/" + "/Content/site.css" = "//Content/site.css"

但部署后,可能是:

"/MySite/SubPath/etc/" + "/Content/site.css" = "/MySite/SubPath/etc//Content/site.css"

你可以:

只需将Model.CssPath更改为相对路径(不带前导&#39; /&#39;) - 即&#34; Content / site.css&#34;

在组合路径时始终使用等效的System.IO.Path.Combine

string path = new Uri(Url.Content("~"), Model.CssPath).ToString();

答案 1 :(得分:0)

将其更改为:

<link href="@path" rel="stylesheet" type="text/css" />

使用@path告诉Razor viewengine解析器从Razor服务器端代码上下文中选择变量path,并将其转储到HTML标记中。

编辑:

有趣。我在视图中有以下内容:

@{
    string path = Url.Content("~") + "Site.css";
}

<link href="@path" rel="stylesheet" type="text/css" />

renderd HTML如下所示:

<link href="/Content/site.css" rel="stylesheet"/>

我不确定//是如何出现在您的网址中的。

编辑:

根据您的评论,听起来Model.CssPath包含/Content/会导致Url.Content陷入混乱,您只需要这样做:

href="@Model.CssPath"