我有以下情况。
我开发了我的第一个MVC Asp.Net应用程序。它在我的服务器上运行在下面的地址
http://localhost:59441/
我写了一些看起来像这样的JQuery Post Methods
$.ajax({ type: "POST",url: "/CeduleGlobale/UpdateCheckBox",...
CeduleGlobale是我的ControllerName
和
UpdateCheckBox是我的methodName
当我将该应用程序放在testServer上时,它被放在一个VirtualDirectory中
因此现在的应用程序
http://testServer/JprApplication/
没有更多的端口要指定,还有一个应用程序名称
当我开始测试时,我很快注意到我的JQuery Post电话没有工作了…
我修改了他们现在的URL是
/JprMvc/CeduleGlobale/UpdateCheckBox
问题是2倍。
>这使得我很难在我的开发机器上进行测试,因为IIS Express不允许我指定一个虚拟目录。
>我不喜欢在JQuery中硬编码虚拟目录名称,因为我不知道应用程序在生产环境中将有什么名字,因此我必须修改我的脚本,然后才能在生产环境中安装应用程序。
我确信我缺少一些基本的东西来简化这个。
谢谢
解决方法
根据您实际拥有JavaScript的位置(在View或单独的JS文件中),您有几个选项。
选项1 – 视图内
<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 )}; }
你可以在你的JS文件中有一个全局变量,这是一个siteroot。这里的回顾是,您需要手动创建每个操作方法路径。在每个页面上,您可以设置站点根全局变量:
独立的JS文件
var siteRoot;
视图
<script type="text/javascript"> siteRoot = '@Request.ApplicationPath'; </script>
请记住,您不能在独立的JS文件中使用Razor语法。我相信,最好让Razor / MVC / .NET动态地为您提供站点路径或URL路由,因为它将真正减少在站点/虚拟目录之间移动时可能会发生的错误。