【问题标题】:Paths in master pages母版页中的路径
【发布时间】:2010-09-09 00:54:19
【问题描述】:

我已经开始使用 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 路径也被全局化?

【问题讨论】:

    标签: asp.net-mvc master-pages


    【解决方案1】:

    改用这个:

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

    【讨论】:

    • 这行不通 - ~/ 被替换为服务器端,因此您需要添加 runat="server" 或将位置包装在 ResolveClientUrl 中
    【解决方案2】:

    制作一个扩展方法。这是一个方法:

    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>
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:
        <script src="<%= ResolveClientUrl("~/Content/menu.js") %>" type="text/javascript"></script>
        

        【讨论】:

        • 太棒了,这正是网页从一开始就缺少的东西
        • 如果它在 中,您最好使用
        猜你喜欢
        • 2017-12-31
        • 1970-01-01
        • 1970-01-01
        • 2010-10-16
        • 1970-01-01
        • 1970-01-01
        • 2011-09-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多