2009-11-05 92 views
1

當虛擬目錄被包含到路徑層次結構中時,我的.js文件中的映像路徑引用(src ='/ images/image.jpg')失敗了。虛擬目錄上的絕對路徑引用問題

我可以在我的應用程序的其他地方處理這個問題,我有服務器方法給我正確的路徑信息。

處理這個.js文件的好方法是什麼?

回答

3

的引用將從js文件的位置;而不是從應用程序根目錄。假設你的根目錄下有一個js目錄,請嘗試在圖像路徑(../images/image.jpg)中添加一個.. ..

+0

是的,OP需要使用相關路徑 – mamu

0

我在不同的JS對象創建的處理程序,如這輸出一些環境參數進行再利用:

/Environment.ashx/.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace MvcApplication2 
{ 
    /// <summary> 
    /// Summary description for $codebehindclassname$ 
    /// </summary> 
    public class Environment : IHttpHandler 
    { 

     public void ProcessRequest(HttpContext context) 
     { 
      context.Response.ContentType = "text/javascript"; 
      context.Response.Cache.SetCacheability(HttpCacheability.Public); 
      context.Response.Cache.SetExpires(DateTime.Now.AddSeconds(600)); 
      context.Response.Write(String.Format("Environment = {{ RootPath:\"{0}\" }};", context.Request.ApplicationPath)); // set any application info you need here 
     } 

     public bool IsReusable 
     { 
      get 
      { 
       return false; 
      } 
     } 
    } 
} 

啓用您的網頁的處理程序。配置:

<configuration> 
    <system.web> 
    <httpHandlers> 
     <!-- ... --> 
     <add verb="*" path="environment.ashx" validate="false" type="MvcApplication2.Environment, MvcApplication2"/> 
    </httpHandlers> 
    </system.web> 

設置你的主人或內容ASPX頁面(如下假設ASP.NET MVC):

<html> 
    <head> 
    <!-- set up your other JS includes, etc. ... --> 
    <script src="<%=Url.Content("~/environment.ashx"); %>" type="text/javascript"></script> 
    </configuration> 
    </head> 
</html> 

現在,對於承擔Environment.ashx所有的JS對象和腳本已經載入,你可以參考Environment.RootPath

var imagePath = Environment.RootPath + "images/image.jpg"; 
0

我假設你正在運行Unix的風味。你有幾個選項,我肯定會工作,而我不確定的一個選項:

  1. Make/images一個虛擬目錄。這是我會做的。
  2. 在您使用的每個虛擬目錄中存儲名爲images的圖像鏈接,並將src更改爲'images/image.jpg'。我沒有一個Unix網絡服務器來測試這個,所以我不知道這是否會工作。
  3. 在每個名爲圖像的虛擬目錄中創建一個子目錄,並在其中存儲指向圖像的鏈接。
+2

由於他使用ASP.Net,我懷疑他沒有使用任何Unix的味道。 – SLaks

3

你可以傳遞一個路徑參數給你的函數嗎?

// in the code behind 
    String imagePath = Page.ResolveClientUrl("~/images/"); 

    ... 

    <%-- in mark up --%> 
    doSomething('<%= imagePath %>');   

    ... 

    // in js 
    function doSomething(path) { 

    var imageSrc = path + '/image.jpg'; 

    } 

有辦法讓它更優雅,但這是一般的想法。