虚拟目录上的绝对路径引用问题

时间:2009-11-05 21:32:00

标签: c# asp.net javascript

当存在虚拟目录时,我的.js文件中的图像路径引用(src ='/ images / image.jpg')失败,因为虚拟目录包含在路径层次结构中

我可以在我的应用程序的其他区域处理这个问题,我可以使用服务器方法为我提供正确的路径信息。

为.js文件处理此问题的好方法是什么?

4 个答案:

答案 0 :(得分:3)

引用将来自js文件的位置;不是来自应用程序根目录。假设您的根目录下有一个js目录,请尝试在图像的路径中添加..(../ images / image.jpg)。

答案 1 :(得分: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';

    }

有一些方法可以让它更优雅,但这是一般的想法。

答案 2 :(得分: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;
            }
        }
    }
}

在web.config中启用处理程序:

<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";

答案 3 :(得分:0)

我假设你正在运行Unix的味道。你有几个我肯定会有用的选择,还有一个我不确定的选择:

  1. 制作/映像虚拟目录。这就是我要做的。
  2. 在您使用的每个虚拟目录中存储指向/ images图像的链接,并将src更改为“images / image.jpg”。我没有Unix网络服务器来测试它,所以我不确定这是否会起作用。
  3. 在每个名为images的虚拟目录中创建一个子目录,并存储指向那里图像的链接。