Ser*_*Now 25 asp.net-mvc jquery url-routing
我有以下情况.
我开发了我的第一个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倍.
我确信我遗漏了一些基本的东西来简化这个.
谢谢
Tom*_*mmy 47
根据您实际拥有JavaScript的位置(在View或单独的JS文件中),您有几个选项.
选项1 - 在视图内
只需使用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路由,因为它将真正减少在站点/虚拟目录之间移动时可能出现的错误.
据我所知,除此之外别无他法.除非您愿意使用相对URL,即:
$.ajax({
        type: "POST",
        url: "./CeduleGlobale/UpdateCheckBox", ...
但是,当您重构代码时,由于各种原因,这可能会变得混乱.或者在前面添加全局定义的URL,因此您只需要在进入生产之前将其更改为一次.
即
//Globally defined serverRoot
serverRoot = "http://someaddress/somevirtualdirectory";
$.ajax({
        type: "POST",
        url: serverRoot + "/CeduleGlobale/UpdateCheckBox", ...
这样,如果你不需要它,你可以设置serverRoot = '';,所有将回到它现在的状态.
| 归档时间: | 
 | 
| 查看次数: | 37427 次 | 
| 最近记录: |