asp.net路径问题
-------------初级篇----------------------------------------
在一般的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路径问题的更多相关文章
- ASP.net 路径问题 详解
各位有没有碰到在日常工作中经常在路径设置的时候把 "~/ ../ .../ . / .http://www.cnblogs.com/"这些符号搞混搞乱了?偶尔还会因路径的问题郁闷了 ...
- ASP.NET路径解惑
对于ASP.NET的路径问题,一直都是云里雾里,没有去详细的理解,今天正好可以梳理一下它们之间的关系和使用方法.而若想明白路径的表示方式的使用方法和区别以及注意事项可以通过下面的几个概念来进一步加深: ...
- asp.net绝对与相对路径
对于asp.net 路径的问题,闲心有很多人和我一样,只是知道一点,理解并不深刻.下面我就来整理一下相路径和绝对路径的知识. 绝对路径: 每个网页都有一个唯一的地址,它就是该网页的绝对路径.绝对路径提 ...
- Fckeditor PHP/ASP File Upload Vul
目录 . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 FCKeditor是目前最优秀的可见即可得网页编辑器之一,它采用JavaScrip ...
- 当你的IIS需要运行ASP网站时,需要这样配置下你的IIS
1.进入Windows 7的 控制面板->程序和功能->选择左上角的 打开或关闭Windows功能 2.现在出现了安装Windows功能的选项菜单,注意选择的项目,红色箭头所示的地方都要选 ...
- 64位Win7下运行ASP+Access网站的方法
64位Win7下运行ASP+Access网站的方法 近日系统升级为WIN7 64位之后,突然发现原本运行正常的ASP+ACCESS网站无法正常连接数据库. 网上搜索多次,终于解决了问题,总结了几条经验 ...
- IIS7.5 asp+access数据库连接失败处理 64位系统
IIS7.5 asp+access数据库连接失败处理(SRV 2008R2 x64/win7 x64) IIS7.5不支持oledb4.0驱动?把IIS运行模式设置成32位就可以了,微软没有支持出64 ...
- Win7/Win8/IIS7/IIS8配置ASP/ACCESS
1.在IIS信息服务管理器配置好站点后,配置ASP属性: a.IIS启用ASP 1.打开控制面板>>程序和功能>>“打开或关闭windows功能”,见下图 2.稍等片刻,出现一 ...
- Win7如何安装IIS来浏览ASP网站
1 进入控制面板-->程序与功能-->点击左侧的"打开或关闭Windows功能"-->把"Internet信息服务"给勾上,点击"确 ...
随机推荐
- SwipeListView实现仿ios的侧滑
github地址:https://github.com/xiangzhihong/SwipeMenuListView 今天介绍一个SwipeMenuListView实现侧滑删除的例子,其实和listv ...
- 10、Libgdx的内存管理
(官网:www.libgdx.cn) 游戏是非常耗资源的应用.图片和音效可能耗费大量的内存,另一方面来说,这些资源没有被Java垃圾回收,让一个垃圾处理来决定将显存中的5M的图片进行释放也不是一个明知 ...
- Credit Summaries & Importing External Credit Exposure
In this Document Goal Solution APPLIES TO: Oracle Order Management - Version 11.5.10.2 to 12.1.3 ...
- (二)plist的使用和序列帧动画
六.plist的使用方法: iOS的程序在安装在手机上以后会把全部资源文件集成在一个文件夹中,这种文件集合称为bundle,对于一般的工程,只有一个bundle,即mainbundle,因此可以通过b ...
- 动态获取html页面的内容,并且取其中的某块元素的方法
$.ajax({ url: "http://192.168.1.59:8888/app-tpl-webapp/tpl/design.html", async:false, ...
- C++中将构造函数或析构函数定义为private
今天面试被问到了这个单例模式常用到的技术手段,下面进行分析: 很多情况下要求当前的程序中只有一个object.例如一个程序只有一个和数据库的连接,只有一个鼠标的object.通常我们都将构造函数的声明 ...
- VCC、 VDD、VEE、VSS 电压理解
VCC. VDD.VEE.VSS 版本一: 简单说来,可以这样理解: 一.解释 VCC:C=circuit 表示电路的意思, 即接入电路的电压: VDD:D=device 表示器件的意思, 即器件内部 ...
- LeetCode之“链表”:Partition List
题目链接 题目要求: Given a linked list and a value x, partition it such that all nodes less than x come befo ...
- Chrome浏览器开发调试系列(一)
// 计划写一个 Chrome 浏览器以及 调试器的系列文章,我慢慢写. 边写边改,发觉博客真是个打草稿的好地方. // 本文针对的是当前最新的浏览器Chrome34,如果你的版本不够新,希望你能够更 ...
- iOS下如何获取一个类的所有子类
因为项目中,不同用户切换时,用的是不同数据库,路径不同,而JKDBModel,数据库创建和字段检测,在app一次生命周期里,只会执行一次,所以得考虑账号切换时,创建数据库,需要获取所有JKDBMode ...