Ajax请求忽略ASP.NET MVC应用程序的URL中的虚拟应用程序子文件夹名称

时间:2012-07-24 18:37:07

标签: ajax asp.net-mvc url-routing asp.net-mvc-routing

我的应用程序位于服务器下的单独虚拟目录下。要访问我的ASP.NET MVC应用程序,用户必须转到:

http://server-dev/superApp

我遇到了忽略“superApp”目录部分的Ajax / Json服务器请求的问题。每当发出Ajax请求时,Fiddler都会显示404,而不是http://server-dev/superApp/User/GetUsersJson,而是调用http://server-dev/User/GetUsersJson(注意缺少的superApp名称)。

Ajax请求示例:

function GetUsers(id) {
    $.ajax({
        url: "/User/GetUsersJson/",
        data:{ id: id},
        datatype: 'json',
        type:'post',
        success: function (result) {
            ////Do stuff with returned result
        }        
    });      
}

注册路线:

r.Match("User/GetUsersJson", "User", "GetUsersJson");

我应该在哪里查看,我可以更改哪些内容以确保我的应用程序虚拟文件夹始终包含在所有网址请求中?

P.S。请注意,所有Javascript / Ajax逻辑都保存在单独的.js文件中,因此没有RAZOR语法可用。

3 个答案:

答案 0 :(得分:4)

您是否尝试过使用HTML帮助程序方法?

url: "@Url.ACtion("GetUsersJson","User)"

编辑:根据评论

您可以使用HTML Helper方法获取Path名称并将其保存在Global变量中并访问外部javascript文件中的

在视图中

<script type="text/javascript>
  var globalGetJSONPath='@Url.ACtion("GetUsersJson","User)';
</script>

现在您可以在外部文件中使用它,就像这样

 $.ajax({
        url: globalGetJSONPath,
        data:{ id: id},
        //remaining items....

  });

答案 1 :(得分:1)

我通过将变量传递给包含hostname + vdir的js来解决这个问题。因为js url生成繁重。
在其他情况下,Shyju的答案是解决这个问题的最佳方法。

答案 2 :(得分:1)

没有服务器端代码生成就无法做到这一点。最简单的事情就是定义全局变量(抱歉),保存应用程序root并在母版页的某个位置初始化它。

生成路由网址的Javascript始终是asp.net mvc中最混乱的部分之一。