19

在我的 MVC 应用程序中对我的控制器进行 AJAX 调用

Controller/FunctionName



$.ajax({
        type: "GET",
        contentType: "application/json; charset=utf-8",
        url: '/Controller/FunctionName',
        .
        .
        .
        )};

我正在使用 MVC 4 并使用JQUERY Ajax上面代码中所示的函数。当我从 Visual Studio 运行时,它工作得很好。

我将它分解到服务器机器上,并且正如预期的那样工作正常。在 AJAX 调用中未发现任何问题。

现在我试图在我的本地机器 IIS 中部署它,它与我的服务器版本相同,(IIS 7.5)但我正在获取404firebug 中的所有 ajax 调用。

我验证了构建,甚至我指向了我的 web 文件夹,并且仍在寻找出了什么问题!

它可以在其他 IIS 中使用,所以我猜它不会是 URL 解析问题。我是否缺少任何设置或任何及时的想法来解决这个问题会很棒。

谢谢

4

4 回答 4

38

这很正常。您已将 url 硬编码到控制器操作中:

url: '/Controller/FunctionName',

如果您将应用程序部署在 IIS 的虚拟目录中,则正确的 url 应该是:

url: '/YourAppName/Controller/FunctionName',

这就是为什么您绝对不应该在 ASP.NET MVC 应用程序中对 url 进行硬编码,但始终使用 url 助手来生成它的原因:

url: '@Url.Action("FunctionName", "Controller")',

如果这个 AJAX 调用在一个单独的 javascript 文件中,您不能使用服务器端帮助程序,那么您可以从您正在 AJAXifying 的某个 DOM 元素中读取这个 url。

例如,假设您有一个锚点:

@Html.ActionLink("click me", "FunctionName", "Controller", null, new { id = "myLink" })

你 AJAXify:

$('#myLink').click(function() {
    $.ajax({
        url: this.href,
        contentType: 'application/json; charset=utf-8',
        type: 'GET',
        .
        .
        .
    )};    
    return false;
});

注意我们是如何从帮助器生成的 DOM 元素中读取 url 的。

结论和 2 条经验法则:

  • 永远不要在 ASP.NET MVC 应用程序中对 url 进行硬编码
  • 在 ASP.NET MVC 应用程序中处理 url 时,绝对总是使用 url 助手
于 2013-06-27T08:04:34.893 回答
2

只是对Darin 的回答的补充,如果“AJAX 调用在一个单独的 javascript 文件中,您不能使用服务器端帮助程序”,请使用隐藏字段将 url 端点存储在视图中:

@Html.Hidden("URLEndpointName", Url.Action("FunctionName", "Controller"))

并阅读你的 js 中的隐藏字段:

url: $("#URLEndpointName").val(),
于 2016-02-16T00:02:09.340 回答
1

您可以在网址中使用双点:

$.ajax({
   url: '../ControllerName/ActionName',
   .......
});
于 2019-02-28T16:34:13.793 回答
0

我在 IIS7.5 的设置中发现“处理程序映射”有一个名为“OPTIONSVerbHandler”的资源未按正确顺序设置,因此返回为未知。

这对我有用,我的 localhost ajax 正在调用我的网络服务器,它有一个不同的名称,它不应该给我一个 CORS 问题,但它确实是我的解决方案。

打开 IIS 并单击左侧窗格中的服务器名称。在右窗格中,双击中间窗格中的“处理程序映射”。在右侧窗格中,选择“查看有序列表”。从那里找到“OPTIONSVerbHandler”和“svc-ISAPI-4.0_32bit”,将“OPTIONSVerbHandler”向上移动,直到它高于“svc-ISAPI-4.0_32bit”。

确保 ajax 调用中的“处理程序”中没有“Access-Control-Allow-Origin”。

于 2014-11-04T22:10:36.003 回答