我有以下情况。
我开发了我的第一个 MVC Asp.Net 应用程序。它在我的服务器上运行,地址如下
http://localhost:59441/
我写了一些类似这样的 JQuery Post 方法
$.ajax({
type: "POST",
url: "/CeduleGlobale/UpdateCheckBox", ...
CeduleGlobale 是我的 ControllerName 和 UpdateCheckBox 是我的方法名
当我将应用程序放在 testServer 上时,它被放入 VirtualDirectory 中
因此现在是应用程序
http://testServer/JprApplication/
不再需要指定端口和应用程序名称
当我开始测试时,我很快注意到我的 JQuery Post 调用不再起作用......
我修改了它们,所以现在的 URL 是
/JprMvc/CeduleGlobale/UpdateCheckBox
问题有两个。
- 这使得在我的开发计算机上进行测试变得困难,因为 IIS Express 不允许我指定虚拟目录。
- 我不喜欢在 JQuery 中硬编码虚拟目录名称,因为我不知道应用程序在生产环境中将具有什么名称,因此我必须修改脚本才能在生产中安装应用程序。<
我确信我缺少一些基本的东西来简化它。
谢谢
最佳答案
根据您的 JavaScript 实际位置(在 View 内或单独的 JS 文件内),您有几个选项。
选项 1 - 在 View 内
只需使用 Html Helpers 即可为您生成链接
<script type="text/javascript">
$(function(){
$.ajax({
type: "POST",
url: "@Url.Action("UpdateCheckBox", "CeduleGlobale")"
});
});
</script>
选项 2 - 独立 JS 文件
我们通常每个页面都有一个函数来设置该页面的处理程序。因此,我们可以执行如下操作:
查看
<script type="text/javascript">
$(function(){
SetOrderPage('@Url.Action("UpdateCheckBox", "CeduleGlobale")');
});
</script>
独立 JS 文件
function SetOrderPage(ajaxPostUrl){
$.ajax({
type: "POST",
url: ajaxPostUrl
)};
}
选项 3 - 独立 JS 文件方法 2
您的 JS 文件中可以有一个全局变量,即 siteroot。这里的缺点是您需要手动创建每个操作方法路径。在每个页面上,您可以设置站点根全局变量,如下所示:
独立 JS 文件
var siteRoot;
查看
<script type="text/javascript">
siteRoot = '@Request.ApplicationPath';
</script>
请记住,您不能在独立的 JS 文件中使用 Razor 语法。我认为最好让 Razor/MVC/.NET 动态地为您提供站点路径或 URL 路由,因为它确实会减少在站点/虚拟目录之间移动时可能出现的错误。
关于jquery - JQuery Post 调用中的相对 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18338042/