首页 新闻 会员 周边

MVC3部署IIS静态资源引用路径问题。

0
悬赏园豆:20 [已解决问题] 解决于 2012-09-20 08:44

做了一个miniui+MVC的项目,在本机上调试是没有问题的,但是部署到IIS上之后发现所有的CSS,和JS引用都失效。

后来用Chrome跟踪调试发现原来是引用路径找不到了。

比如一个CSS文件引用../../Content/Style/demo.css,在本机调试路径是:

这样是没有问题的,但是部署到IIS上引用就成了
这样是访问不了的,后来调试发现正确的引用地址应该是
http://172.20.168.56:8080/QSMC.EIT/Content/Style/demo.css
 
也就是,部署上IIS后对静态资源的引用少了网站名(我们一个Server上挂的有多个网站)。
 
后来,在网上找了一些资料,发现有很多人都出现过这种问题,解决方案就是把引用文件的路径改成相对应于网站根目录的路径。就是把../../Content/Style/demo.css改成
<%= Url.Content("~/Content/scripts/miniui/themes/blue/skin.css")%>,这样就行了。
好吧,我费了九牛二虎之力吧所有的引用路径都坐了替换,这样图片,js 和css的引用路径是解决了,但是另一个问题是js文件中的Ajax请求路径也出现了这样的问题,由于我的js文件和aspx文件是分开放的,ajax中根本不识别
<%= Url.Content("“)这样的语法。
比如一个一个js请求我是这样写的正确的/Dispatch/SaveDispatchHeader,在本机调试是http://localhost:13321/Dispatch/SaveDispatchHeader,没有任何问题,
想要的结果是http://172.20.168.56:8080/qsmc.eit/Dispatch/SaveDispatchHeader。
这样的话,所有的ajax请求都会失效。。。。。。
不知道有没有人遇到类似情况,是怎么解决的。
 
Gamain的主页 Gamain | 菜鸟二级 | 园豆:357
提问于:2012-09-17 09:17
< >
分享
最佳答案
0

参考miniui的boot.js里的方法,获取网站根目录,设置一个全局变量,所有JS使用路径的都加上。

收获园豆:10
向往-SONG | 老鸟四级 |园豆:4853 | 2012-09-17 09:37

这个方法我也考虑过,但是我很奇怪的一点是为什么以前的WebApplication就没有这种情况呢?难道大家部署mvc程序都用的都是这个方法吗?

另:你说的"获取网站根目录"是指设置一个静态变量还是用代码获取呢?或者说miniui已经提供了内置的方法?

Gamain | 园豆:357 (菜鸟二级) | 2012-09-17 09:42

@Gamain: 

(function(){
var href = location.href;
href = href.split("#")[0];
href = href.split("?")[0];
var ss = href.split("/");
ss.length = ss.length - 1;
href = ss.join("/");
window. AppPath=href;
})();

在你的每个页面都要引用的JS里最前面加入这段,在你要用路径的JS里:$.post(AppPath+"xxx/xxx"..

大家一般都是部署在IIS6及以上版本所以就不会有这问题。

向往-SONG | 园豆:4853 (老鸟四级) | 2012-09-17 10:01

@向往-SONG: 

我刚才看了一下,我们的server的iis是6.1的,操作系统是Windows Server2008R2,怎么还会有这个问题呢?难道是我的IIS配置不正确吗?

这样的话我所有的页面和js文件中的ajax都要做手动替换,工作量有点大。

还有一个问题是,我的菜单用的是mini-outlookmenu,导航菜单链接是配置到DB中的,比如我DB中配置的是Dispatch/CreateHeader,有没有办法统一配置成

AppPath+Dispatch/CreateHeader呢?就是在加载菜单路径之前就将这个href给修改掉,由于miniui做了代码混淆,不知道这一部分如何修改呢?
Gamain | 园豆:357 (菜鸟二级) | 2012-09-17 10:31

@Gamain: 

难道你建的是虚拟目录,不是网站?分开建成不同的网站,用不同的端口。

从数据库读取的那就只能在后台加AppPath了。

向往-SONG | 园豆:4853 (老鸟四级) | 2012-09-17 10:38

@向往-SONG: 

我建的是网址啊,只不过我们的server以前是没有装framework4和mvc3的,前天我装了一下,然后没有重启Server,不知道是不是这个问题导致的。

 

话说,这个问题让我纠结了3天了.............

Gamain | 园豆:357 (菜鸟二级) | 2012-09-17 10:40

@Gamain: 

刚才说错了,我们的iis是7.5的。。。。

Gamain | 园豆:357 (菜鸟二级) | 2012-09-17 10:47

@Gamain: 

是不是你IIS网站的路径设置错了?

D:/xxx/qsmc.eit/bin

看你IIS网站路径是不是设置到D:/xxx/qsmc.eit

向往-SONG | 园豆:4853 (老鸟四级) | 2012-09-17 11:01

@向往-SONG: 

不知道您所说的IIS网站路径指的是什么呢?

我配置iis的方法就是把文件放到iis的默认目录下,然后再在iis中右击这个文件夹,点”转换成应用程序“就可以了啊,并没有设置iis路径啊。

Gamain | 园豆:357 (菜鸟二级) | 2012-09-17 11:26

@Gamain: 

IIS根目录右键,新建网站,会让你填路径。

向往-SONG | 园豆:4853 (老鸟四级) | 2012-09-17 12:03

@向往-SONG: 好像是不行啊

Gamain | 园豆:357 (菜鸟二级) | 2012-09-17 14:55

@Gamain: 请问这个问题 最后怎么解决的啊。我也遇到这个问题了。js里不支持Url.Content("“),我想把<img>的src重新賦值,路徑不對

Ci | 园豆:200 (初学一级) | 2015-04-03 11:59
其他回答(4)
0

你 加 一个 httpmodel ,如果读取js。就自动加 一个路径哦。

收获园豆:8
無限遐想 | 园豆:3740 (老鸟四级) | 2012-09-17 10:39

恩,如果能实现的话这样应该是最好的办法了。Server端如果能拦截请求,把所有的静态资源(图片,css等)和ajax请求都加上路径的话,那么就不用费这么大力气做手动替换了(这真的是一个极其考验耐心的工作)。

不知道您有没有做过类似的项目,有没有可以参考的代码呢?

支持(0) 反对(0) Gamain | 园豆:357 (菜鸟二级) | 2012-09-17 10:51

@Gamain: 你 查 一下。这个 很多的例子。应该比较容易的。

支持(0) 反对(0) 無限遐想 | 园豆:3740 (老鸟四级) | 2012-09-17 11:12

我试了,好像是不行啊。%>_<%

支持(0) 反对(0) Gamain | 园豆:357 (菜鸟二级) | 2012-09-17 14:55
0

css和图片,js的路径还有一个办法是从cs后台输出,ajax的还真没想到更好的办法

收获园豆:2
jason2013 | 园豆:1998 (小虾三级) | 2012-09-17 16:38

我都纠结死了,不知道您有没有做过类似的项目呢?

现在mvc+UI框架应该是很流行的吧,这个问题怎么没有一个好点的解决方案呢。

支持(0) 反对(0) Gamain | 园豆:357 (菜鸟二级) | 2012-09-17 18:10
0

我也遇到同样问题,不知道楼主怎么解决的

KoStark | 园豆:202 (菜鸟二级) | 2013-03-27 09:35
0

刚好遇到这个问题,看到了楼主的帖子,不知道楼主最后怎么解决的啊

无忧岛主 | 园豆:202 (菜鸟二级) | 2015-03-30 11:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册