比如你的工程是Web(url是:http://localhost/web/default.aspx) Request.ApplicationPath 就是/Web 如果是站点就直接返回"/";

------------------------------------------------------

(1)~/: 根目录,可以用在需要设置路径的控件比如:imagebutton,image等以及链接ascx文件,配置文件。

(2)../: 相对当前目录的上层目录,好处是可以不知道文件夹的名字知道层次结构就可以了

(3) /: 针对目录,好处是针对根路径,如果本地目录和服务器目录一致,那直接用/就可以保证路径正确,这种情况很少. Request.ApplicationPath 注意如果没有虚拟目录就直接返回/,那你程序里面就不要设置/ 比如 Request.ApplicationPath+"/images/a.gif" 如果是站点 就是等于 "//images/a.gif",错误的 如果有虚拟目录就是 "Webapplication1/images/a.gif" 没有/的 Request.ApplicationPath 发挥虚拟目录名称,如果是站点就返回/

(4) ./ : 当前文件夹。

例如:

  在一般的href中路径的引用问题

  ./index.aspx与index.aspx都代表当前文件夹

  /index.aspx 代表从域名直接定位到这个路径

  ~/index.aspx代表智能感知这个文件的虚拟路径

  ../index.aspx代表上一层文件路径

在用模板页的时候容易遇到路径的问题

1 ./index.aspx如果放在服务器控件中不会有错.但如果放在一般的标签中就会出错了,因为它会到内容页的当前目录去找,可我们设置的时候,是想让它到模板页的目录去找. 2 /index.aspx 因为这个绕过了相对的当前路径,所以很不错,但是也有一个小小的问题,那就是iis5.1,iis6.0,vs自带的iis在域名解析这一块有点小差别.iis5.1当下面有多个虚拟根目录时,由于在访问时又加了一层目录,所以会出错,iis6.0由于可以通过设置多个端口来发布不同的网站,所以虚拟的根目录不可见,路径和它无关,所以就不会出问题,而内置的iis也启用了虚拟的根目录,这样有可能调试时没有问题,发布时却有了问题,在iis6.0上没有问题,在iis5.1上就有了问题,可移植不好.

3 ~/index.aspx这个根据路径在整个虚拟目录中智能感知他的路径,很不错的 结论:1所以在模板页中,要用服务器端的控件,然后再用./index.aspx和~/index.aspx,只用这样才不会出现问题

----------------高级篇-------------------------------------------

母版页引用外部文件的路径问题 在母版页中引用的外部文件不外乎css 和js 文件, css文件比较简单, 因为它的路径是相对于母版页的位置而言的, 而js 则不然, 它是相对于内容页而言的. 举个例子, 有下面的文件树:

root  |_master.master  |_content1.aspx  |_js1.js  |_folder1      |_content2.aspx

在应用程序的根下面, 有一个母版页master.master, 一个内容页content1.aspx, 一个js文件js1.js, 另外, 还有一个处于folder1子目录下的另一个内容页conten2.aspx,  则, 在母版页中引用js1.js 时, content1 的相对路径就是当前目录, 直接写文件名就行了, 可是对content2来说,  js1.js 处于它的上层目录, 相对路径要写作: ../js1.js  , 由于此js 文件是在母版页中的引用的, 所以这个相对路径就没办法直接写了.

解决办法有: 1. 直接写绝对路径.

<script type="text/javascript" src="//virtualPath/js1.js"></script> 这种做法是我极度反感, 并且无法忍受的, 因为它使得虚拟目录的名字无法改变, 而且事实上, 我们公司应用程序的名字和正式服务器上虚拟目录的名字是不同的, 所以这种方法要么在开发阶段无效, 要么在运行阶段无效, 除非应用程序名和虚拟目录名总是一样, 并且虚拟目录名不会改变, 否则不应该这样引用js.

2. 在服务器端注册.

Page.ClientScript.RegisterClientScriptInclude("js1.js", Page.ResolveClientUrl("~/js1.js")); aspx页面中可以使用<%=Page.ResolveUrl("~/")js1.js%>但是不知道为什么不能用在master中

这种做法的缺点也是明显的, 首先, 它必须放在page_load 之类的事件处理器中, 每次回发都执行一次,  其次, 这样引用后, 在页面上写js代码时, 无法智能感知到已经引用的js 文件, 减慢编程速度, 而且一大堆警告也不是什么赏心悦目的事件.

3. 用ScriptManager 引用

<asp:ScriptManager ID="sm1" runat="server">         <Scripts>             <asp:ScriptReference ScriptMode="Auto" Path="~/Js1.js" />         </Scripts>     </asp:ScriptManager> 这种引用是可以智能感知到的, 目前为止也没发现有什么副作用, 是推荐的解决方案.

--

昨天漏写了图片url的路径问题, 图片url 也是相对于内容页的, 所以在客户端并没有特别好的办法, 我的建议是直接给img 控件加个runat="server" 属性, 例如:  <img alt="" src="data:images/img.gif" runat="server" /> 这样, 服务器就会自动给它生成正确的url.

另外, 如果在样式中指定了背景图片之类的, 建议放入css文件中, 在css文件中, url() 里面的相对路径是相对于css文件本身的, 而如果放入母版页中, 则就变成了相对于内容页了.  例如:

母版页中:

<table class="css1">

css文件:

.css1 {     background-image:url(../images/1.jpg);     background-repeat:no-repeat; }   而如果把这两个样式放在table的style中, 就只有跟母版页路径相同的内容页才能正确显示.

Asp.NET 之 路径浅析的更多相关文章

  1. Asp.net项目路径获取方法【转】

    获取项目完整的绝对路径string path = System.AppDomain.CurrentDomain.BaseDirectory.ToString();string path = Serve ...

  2. ASP.NET获取路径的方法

    原文:[转载]ASP.NET获取路径的方法 HttpContext.Current.Request.PhysicalPath;    // 获得当前页面的完整物理路径.比如 F:\XFU.NSQS\p ...

  3. 关于ASP.Net中路径的问题

    比如你的工程是Webapplication1(url是:http://localhost/webapplication1/webform1.aspx) Request.ApplicationPath ...

  4. IIS7.5下启用asp父级路径

    如果你是运行asp显示需要启动父路径的话可以这样解决: 在IIS 下 打开ASP选项,有个启用父路径的选择项,选择True 就可以了! 具体看图!因为没法贴两张图,就弄在一张里了!

  5. 【转】 ASP.NET网站路径中~(波浪线)解释

    刚开始学习ASP.NET的朋友可能会不理解路径中的-符代表什么,例如ImageUrl=”~/Images/SampleImage.jpg” 现在我们看看-代表什么意思.-是ASP.NET 的Web 应 ...

  6. [转载]ASP.NET对路径"xxxxx"的访问被拒绝的解决方法小结

    异常详细信息: System.UnauthorizedAccessException: 对路径“D:/temp1/MyTest.txt”的访问被拒绝     在windows 2003下,在运行web ...

  7. 【转载】ASP.NET获取路径的方法

    HttpContext.Current.Request.PhysicalPath;    // 获得当前页面的完整物理路径.比如 F:\XFU.NSQS\project\website\Default ...

  8. ASP.NET对路径"xxxxx"的访问被拒绝的解决方法小结

    异常详细信息: System.UnauthorizedAccessException: 对路径“D:/temp1/MyTest.txt”的访问被拒绝     在windows 2003下,在运行web ...

  9. ASP.NET虚拟路径小结

    一.虚拟路径的概念 “虚拟路径”是指请求 URL 中跟在服务器标识符后面的部分举例. 如绝对路径:http://www.mysite.com/MyApp/Default.aspx,其对应的虚拟路径为: ...

随机推荐

  1. REST四种请求(get,delete,put,post) 收集整理 之一

    转自:http://blog.csdn.net/cloudcraft/article/details/10087033 资源是REST中最关键的抽象概念,它们是能够被远程访问的应用程序对象.一个资源就 ...

  2. VMare中安装“功能增强工具”,实现CentOS5.5与win7host共享文件夹的创建

    读者如要转载,请标明出处和作者名,谢谢. 地址01:http://space.itpub.net/25851087 地址02:http://www.cnblogs.com/zjrodger/ 地址03 ...

  3. 实现系统函数time,获取当前时间与UTC的间隔

    因种种原因,最近很少上cnblogs了.刚写了一个实现time的函数,可以通过该函数获取当前时间与1970年1月1日 0时0分0秒的差值,精确到秒,可以用在某些没有时候使用time不正确而不得不调用硬 ...

  4. [原创]Devexpress XtraReports 系列 6 创建并排报表

    昨天我们已经介绍了如何创建交叉报表,详见:[原创]Devexpress XtraReports 系列 5 创建交叉报表 今天我们继续我们的XtraReports系列.Demo和数据库文件最后会附上. ...

  5. Struts Hello World Example

    In this tutorial we show you how to develop a hello world web application using classic Struts 1.3 f ...

  6. 转载linq to sql 的详解

    [转]LINQ To SQL 语法及实例大全 2011-11-26阅读38651 评论9 LINQ to SQL语句(1)之Where Where操作 适用场景:实现过滤,查询等功能. 说明:与SQL ...

  7. UVa 297 - Quadtrees

    题目:利用四叉树处理图片,给你两张黑白图片的四叉树,问两张图片叠加后黑色的面积. 分析:搜索.数据结构.把图片分成1024块1*1的小正方形,建立一位数组记录对应小正方形的颜色. 利用递归根据字符串, ...

  8. case when遇到空串转成0

    须要注意:假设字段为varchar类型,when后的条件要加上引號 SELECT (CASE marital_status WHEN 0 THEN '已婚' WHEN 1 THEN '未婚' ELSE ...

  9. jQuery进行DOM操作记录

    1.在元素内部插入DOM元素 ①插入到元素内部原有元素之后 append(content)      返回值:jQuery  参数-content:要插入的元素String,Element,jQuer ...

  10. (转)用AGG实现高质量图形输出(一)

    AGG是一个开源.高效的跨平台2D图形库.AGG的功能与GDI+的功能非常类似,但提供了比GDI+更灵活的编程接口,其产生的图形的质量也非常高(自称超过GDI+) 使用前AGG的准备工作 下载AGG库 ...