【问题标题】:Ajax requests ignore virtual application sub-folder name in URL for ASP.NET MVC applicationAjax 请求忽略 ASP.NET MVC 应用程序 URL 中的虚拟应用程序子文件夹名称
【发布时间】:2012-07-24 18:37:07
【问题描述】:

我的应用程序位于服务器上一个单独的虚拟目录下。要访问我的 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");

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

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

【问题讨论】:

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


    【解决方案1】:

    您是否尝试过使用 HTML 辅助方法?

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

    编辑:根据评论

    您可以使用 HTML Helper 方法获取路径名称并将其保存在全局变量中并在外部 javascript 文件中访问它

    在视图中

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

    现在你可以像这样在外部文件中使用它

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

    【讨论】:

    • 我用“p.s. 请注意,所有 Javascript/Ajax 逻辑都保存在单独的 .js 文件中,因此没有可用的 RAZOR 语法”更新了我的 OP。就像你发布这个一样。所以不,很遗憾,这行不通。
    • 啊……这主意不错!
    • 顺便说一句,请注意,在这种方法中,你们将使用 NLB 可能会产生一些后果。如果您在一个节点上的应用程序将返回 node1.example.com,但在公共端会有类似 contoso.com..
    • 如果不将更改推送到服务器,我将无法尝试,但我想问你... will var globalGetJSONPath='@Url.Content("~/User/GetUsersJson/")';也能正常工作并返回与上面的 Action 示例相同的结果?
    【解决方案2】:

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

    【讨论】:

    • 我还没有找到比这更好的方法。
    • 我有单独的控制器返回 js 全局变量。最重要的是自定义 js 路由插件。所以在 js 代码看起来像 $.Action("ActionName","Controller",args) 或 $.Uri("ActionName","Controller")
    【解决方案3】:

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

    路由 url 的 Javascript 生成一直是 asp.net mvc 中最混乱的部分之一。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-23
      • 1970-01-01
      • 1970-01-01
      • 2011-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多