2012-07-24 55 views
2

我有一个MVC应用程序。这是基本的设置,其中我做了以下更改About.cshtml:当部署为虚拟目录时,MVC站点extenal脚本不起作用

@{ 
    ViewBag.Title = "About Us"; 
} 
<script [email protected]("~/Scripts/test.js") type="text/javascript"></script> 
<h2>About</h2> 
<p> 
    Put content here. 
</p> 

所以我加入到外部脚本的引用。

脚本本身包含以下内容:

$(document).ready(function() { 

    $.post('/Home/GetResult', null, function (data) { 

     alert(data); 

    }); 

}); 

堪称家居控制器的方法是:

public int GetResult() 
     { 
      return 3; 
     } 

因此,它是在用户点击了有关调用getResult方法的基本设置被调用并弹出一个包含3的警报。

因此,我在IIS中将其设置为一个网站,并按预期工作。当点击About时,弹出消息并且网站 的地址为http://localhost:xx/Home/About

然后我尝试将它设置为虚拟目录。

当点击关于没有消息弹出。 它所在的URL是:http://localhost:xx/Practise/Home/About其中practice是虚拟目录的名称。

那么,为什么消息不会出现?

现在不能再找到该文件,现在url包含虚拟目录名称?

如果需要将其作为虚拟目录托管,那么解决此问题的最佳方法是什么?

+1

检查HTML源代码以查看正在加载.js文件的位置,看看您是否可以在浏览器中打开它。尝试更改其URL到/Practise/Scripts/test.js – Daveo 2012-07-24 21:45:35

回答

1

你不应该使用硬编码的URL。始终使用URL辅助函数尝试像

$(document).ready(function() { 

    $.post('@Url.Action("GetResult", "Home")', null, function (data) { 

     alert(data); 

    }); 

}); 

负责实际的物理名称为您

+0

以及它在外部JavaScript文件,所以我不能使用该助手。这是否意味着你不能使用外部JavaScript文件,如果它是虚拟目录? – AnonyMouse 2012-07-24 21:54:49

+0

如何为[email protected](“〜/ Scripts/test.js”)一个外部脚本?无论如何,你可以使用外部脚本触发你的页面,但在这种情况下,你必须对它进行硬编码,以便在出现问题时有所有问题。你最好的选择可能是像IIS URL重写http://www.iis.net/download/urlrewrite - 注意,我从来没有使用它。 – 2012-07-25 16:32:43

1

通常我做的情况下,这样是有写在通过路由的网页的网址,什么,有库消耗众所周知的变量或采取对象初始化时:

在你的页面:

var getResultUrl = '@Url.Action(...)'; 

在脚本文件:

$(document).ready(function() { 
    $.post(getResultUrl, null, function (data) { 

     alert(data); 
    }); 
}); 

你必须要小心的上这样的东西,在网页脚本需要运行之前,包括脚本,操作的顺序,或者你需要做别的事情来调用它(包装在一个函数) 。