1.问题讨论
我们在开发web应用程序的时候会涉及js/css/handle/image/其他附件读取的问题。
当我们在当前页面引用js/css/image等文件的时候有下以引用方式
(如果是后台读取文件的路径有很多方法如Server.MapPath ,HttpContext.Current.Request.ApplicationPath
这里不作讨论。)
/ 引用js 的网站根目录
./ 引用js 的目录的 当前目录
../ 上级目录
同时我们也可以在当前页中引用了一个js 文件 这个文件也包含了其他的页面的连接(如:本人的一个CommonPop.js里面就写了一个系统中所有的弹窗的方法和弹出框的链接内容。)
这样我们初始化CommPop.Url这个值的时候就可以给定根目录的值(本地的IIS或是VS虚拟IIS就可以用””空值来代替因为他没写应用名)
但是我们在IIS 配置中设置了虚拟目录和虚拟名称 (我这里是定义的应用名称是Codetest)
在 /读取 根目录的时候就是没带这个虚拟目录所以
我们在后台的 HttpContext.Current.Request.ApplicationPath;(读取ASP.NET根目录)
读出应用名称实现根目录读取的方法
不然就是缺少这个应用名称页面会找不到文件404 错误:
如下图;
2.实例说明
上面是我们问题描述可能 说的有点笼统,以下举例说明我们先建个解决方案
目录结构
1.方式一 我们先用最老土的方法直接在页面里写js 脚本
这里我们的页面 方式一直接引用.aspx 对应 WebForm2.aspx (本目录)
WebForm1(下级目录)结果是
可以打开的
上了IIS后 就
可以打开
但是我们看到 IIS上多了个CodeTest/这样一个路径。
2.方式二脚本引用
这里就碰到了我们实际上的问题了
就是我们把 window.open这个函数写到一个js文件里
就是一个主页面再去加载一个js 文件再里面打开一个路径的话他是用他”引用的js 的页面作为根基础的”,所以我们会碰到一个问题就是一个js 中引用了一个页面的路径,结果好多页面都引用这个js 如果是同一级的文件还好,要是不同级别的 不就囧了?
我这里 打开了弹窗4
webForm4打开也是引用JScript3.js
那它就会找webForm4.aspx
看他就找当前的路径就找不到这个文件报404错误了
所以我这里就用(ASP.Net的根目录来做基础对应用的文件都做绝对路径的引用)。
实际应用上就要推荐用绝对路径来实现引用。
3.关于根目录读取.aspx
本地可以打开
但是上了IIS后
仔细观察后发现正好少了codetest的应用名称如果补上就正常了,所以我思考在解决问题这个方法,看了网上用以下方式来实现
但是觉得不太好,不知大侠们有什么可以指点一二的?
用Server.MapPath ,HttpContext.Current.Request.ApplicationPath 写后台代码块只能实现.aspx页面的根引用,但是js 文件无法识别代码块。