这在昨天工作,我必须在某些时候改变了一些东西,但样式表的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
。
为什么?
答案 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"