青野 发表于 2015-8-13 13:24:05

Asp.net mvc4 发布到IIS问题

  mvc4的项目部署到IIS上发现问题
  1、所有的CSS,和JS引用都失效。
  后来用Chrome跟踪调试发现原来是引用路径找不到了。
  比如一个CSS文件引用../../Content/Style/demo.css,在本机调试路径是:
  http://localhost:13321/Content/Style/demo.css
  这样是没有问题的,但是部署到IIS上引用就成了
  http://172.20.168.56:8080/Content/Style/demo.css
  这样是访问不了的,后来调试发现正确的引用地址应该是
  http://172.20.168.56:8080/QSMC.EIT/Content/Style/demo.css
  
     解决方案:是把引用文件的路径改成相对应于网站根目录的路径。就是把../../Content/Style/demo.css改成 @Url.Content("~/Content/scripts/miniui/themes/blue/skin.css"),这样就行了。
  
  2、js文件中的Ajax请求路径也出现了这样的问题,js文件和.cshtml文件是分开放的,ajax中不识别
  @Url.Content("“)这样的语法。
  比如一个一个js请求我是这样写的正确的/Dispatch/SaveDispatchHeader,在本机调试是http://localhost:13321/Dispatch/SaveDispatchHeader,没有任何问题,
  但是部署到iis上后就成了http://172.20.168.56:8080/Dispatch/SaveDispatchHeader
  想要的结果是http://172.20.168.56:8080/qsmc.eit/Dispatch/SaveDispatchHeader。
  这样的话,所有的ajax请求都会失效。。。。。。
  
  解决方案:
  在.cshtml文件中,创建一个方法,获取网站根目录和虚拟目录方法。


<script type="text/javascript">

function GetUrlAndVirtualPath(url)
{
// var path = '@Request.ApplicationPath';

var path = "@Request.Url.GetComponents(UriComponents.SchemeAndServer, UriFormat.Unescaped)";

//alert(path);

var vir = "@HttpRuntime.AppDomainAppVirtualPath";

// alert(vir);

// path = "@Request.Url.GetLeftPart(UriPartial.Authority) + @Url.Content("~")";

//if (path != '/')
// path = path + '/'
var newUrl;

if (vir != '/') {
newUrl = path + vir + url;
}
else {
newUrl = path + url;
}
// alert(newUrl);return newUrl; }
</script>  
  在js文件中调用
      url = GetUrlAndVirtualPath('/contact/getList');
页: [1]
查看完整版本: Asp.net mvc4 发布到IIS问题