【问题标题】:AJAX Jquery MVC5 404 errorAJAX Jquery MVC5 404 错误
【发布时间】:2015-10-14 08:04:19
【问题描述】:

我是 MVC 的新手,我有一个关于 MVC / AJAX 调用的问题。

我正在尝试从 MVC 控制器取回数据,但它一直说 404 错误

"NetworkError: 404 Not Found - http://localhost:6481/MDT/Detail?id=4935"

我的 Javascript 调用如下,我硬编码 id:1245 作为测试。我尝试切换 POST 和 GET,但仍然没有运气

 $.ajax({
    type: "GET",
    url: 'MDT/Detail',
    data: JSON.stringify({
        id: 1245
    }),
    contentType: "application/json",
    dataType: "JSON",
    success: function(data) {
        console.log(data);
    },
    fail: function(data) {}
 }); 

我在没有 JSON.stringify 的情况下试过了,错误还是一样(404)

$.ajax({
    type: "GET",
    url: 'MDT/Detail',
    data: {
        id: 1245
    },
    contentType: "application/json",
    dataType: "JSON",
    success: function(data) {
        console.log(data);
    },
    fail: function(data) {}
}); 

以下是Controller中的代码..

    [Route("MDT/Detail/{id}")]
    public JsonResult Detail(int? id)
    {
        ITS.Models.ComputerDetail cp = GetDataFromDatabase(id.Value);

        return Json(cp, JsonRequestBehavior.AllowGet);
    }

我已经在Firebug中签入并且参数正确传递如下:

我无法弄清楚我做错了什么。你能帮我解决这个错误吗?

如果我使用 (http://localhost:6481/MDT/Detail/1245),它可以正常工作并返回 JSON 对象,但我无法从 JQuery AJAX 调用此 MVC 方法。

【问题讨论】:

  • 如果你不字符串化(也没有必要),那么你需要删除contentType: "application/json",
  • url: '/MDT/Detail', 您可以尝试在 MDT 之前添加 / 前导斜杠。
  • 并使用url: '@Url.Action("Detail", "MDT")', 生成正确的网址,即/MDT/Detail
  • 我试过 /MDT/Detail、MDT/Detail/、/MDT/Detail/ 或 Url.Action、Url.Content 等,仍然显示 404 错误。
  • 忘了提,在我添加路由属性之前,相同的代码都可以工作,因为我希望一个功能使用localhost:6481/MDT/Detail/1245 而不是localhost:6481/MDT/Detail?id=1245

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


【解决方案1】:

您必须发送 id,而不是像参数,而是像 url 的一部分。将您的代码更改为:

$.ajax({
    type: "GET",
    url: 'MDT/Detail/1245',
    contentType: "application/json",
    dataType: "JSON",
    success: function(data) {
        console.log(data);
    },
    fail: function(data) {}
});

【讨论】:

    【解决方案2】:

    答案就是不使用

    JSON.stringify({ id: 1245 })
    

    通过

    data:{ id: 1245 }
    

    [HttpPOST] 属性添加到控制器操作后,POST 请求也可以工作。

    并且 MVC 默认路由是 {Controller}/{Action}/{id} 根据您的 ajax 调用 Route 是 http://localhost:6481/MDT/Detail?id=4935 并且 id 被用作查询字符串参数,因此您需要将 Route 用作 http://localhost:6481/MDT/493

    【讨论】:

    • 这是不正确的,实际上会导致更多问题。
    • 是的,对不起,但使用它的 url 作为 url: 'MDT/Detail/'+id,不要在“数据”中使用 id,它将“id”作为查询字符串参数。但是 MVC 默认路由是 {Controller}/{Action}/{id}
    • 它也可以与 POST 一起使用而无需更改。为此,您必须在控制器操作上方添加属性 [HttpPost]。
    猜你喜欢
    • 2015-09-26
    • 2011-05-21
    • 1970-01-01
    • 2010-11-05
    • 2013-05-30
    • 2012-02-24
    • 2018-01-16
    • 1970-01-01
    • 2012-04-20
    相关资源
    最近更新 更多