我已经开始使用ASP.net mvc网站的母版页,但遇到了一个问题。 当我在母版页上链接样式表时,似乎可以正确更新工作表的路径。 那是我有的代码
1
   | <link href="../../Content/Site.css" rel="stylesheet" type="text/css" />  | 
 
但一旦页面被馈送到浏览器,我就会看源
1
   | <link href="Content/Site.css" rel="stylesheet" type="text/css" />  | 
 
 
这是完美的。 但是,相同的路径转换似乎不适用于脚本文件。
1
   | <script src="../../Content/menu.js" type="text/javascript">  | 
 
就是一样的东西 它似乎仍然可以在顶层页面上运行,但是我怀疑只是浏览器/ Web服务器可以纠正我的错误。 有没有办法让src路径也被遍历?
1
   | <script src="<%= ResolveClientUrl("~/Content/menu.js") %>" type="text/javascript">  | 
 
 
制作扩展方法。 这是一个方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
   | 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; 
}  | 
 
然后,您可以像这样编写脚本引用:
1
   | <script type="text/javascript" src="<%= Html.ResolveUrl("~/Content/menu.js")%>">  | 
 
或者您可以在页面的HEAD部分使用BASE标签。 然后,所有链接都是相对于在"基本"标签中输入的位置而言的,您不必使用" ../../"和"?"东西。 CSS文件中的链接(背景url等)除外,其中链接是相对于CSS文件的位置而言的。
使用此代替:
1
   | <link href="~/Content/Site.css" rel="stylesheet" type="text/css" />  |