2

我已经开始使用 ASP.net mvc 站点的母版页进行一些工作,并且遇到了一个问题。当我在母版页上链接样式表时,它似乎正确更新了表单的路径。那是在我的代码中

<link href="../../Content/Site.css" rel="stylesheet" type="text/css" />

但是一旦页面被提供给我得到的浏览器,就会查看源代码

<link href="Content/Site.css" rel="stylesheet" type="text/css" />

这是完美的。但是,相同的路径翻译似乎不适用于脚本文件。

<script src="../../Content/menu.js" type="text/javascript"></script>

只是出来一样的东西。它似乎仍然可以在顶级页面上运行,但我怀疑这只是浏览器/网络服务器纠正了我的错误。有没有办法让 src 路径也被全局化?

4

4 回答 4

3
<script src="<%= ResolveClientUrl("~/Content/menu.js") %>" type="text/javascript"></script>
于 2008-10-03T22:33:25.040 回答
1

做一个扩展方法。这是一个方法:

public static string ResolveUrl(this HtmlHelper helper, string virtualUrl)
{
    HttpContextBase ctx = helper.ViewContext.HttpContext;
    string result = virtualUrl;

    if (virtualUrl.StartsWith("~/"))
    {
        virtualUrl = virtualUrl.Remove(0, 2);

        //get the site root
        string siteRoot = ctx.Request.ApplicationPath;

        if (!siteRoot.EndsWith("/"))
            siteRoot += "/";

        result = siteRoot + virtualUrl;
    }
    return result;
}

然后,您可以编写脚本参考,例如:

<script type="text/javascript" src="<%= Html.ResolveUrl("~/Content/menu.js")%>"></script>
于 2008-09-15T20:04:02.180 回答
0

改用这个:

<link href="~/Content/Site.css" rel="stylesheet" type="text/css" />
于 2008-09-15T16:46:14.743 回答
0

或者您可以在页面的 HEAD 部分中使用 BASE 标记。然后,所有链接都相对于在“base”标签中输入的位置,并且您不必使用“../../”和“~”的东西。除了 CSS 文件中的链接(背景 url 等),其中的链接是相对于 css 文件的位置的。

于 2008-09-15T20:30:42.490 回答