2008-09-15 65 views
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> 

只是作为同样的事情出来。它似乎仍然在顶层页面上工作,但我怀疑这只是浏览器/ Web服务器纠正我的错误。有没有办法让src路径也是globbed?

回答

3
<script src="<%= ResolveClientUrl("~/Content/menu.js") %>" type="text/javascript"></script> 
+0

真棒,这正是已网络已经失踪自创建以来的页面 – stimms 2008-10-16 03:35:55

0

使用这个代替:

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

这是行不通的 - 在〜/替换服务器端,所以你需要添加中用runat =“服务器”或包裹的位置在ResolveClientUrl – Keith 2009-05-27 15:01:29

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> 
0

,或者您可以使用BASE标记在你页面的HEAD部分。你所链接的所有内容都是相对于在“base”标签中输入的位置而言的,你不必使用“../../”和“〜”东西。除了CSS文件中的链接(后台网址等),其中链接是相对于css文件的位置。