【问题标题】:Ajax call to MVC controllers对 MVC 控制器的 Ajax 调用
【发布时间】:2018-08-07 17:52:28
【问题描述】:

我正在尝试通过 ajax 调用将一些数据传递给 c# mvc 控制器。即使任务应该是直截了当的,我也无法让 mvc 控制器读取我通过 ajax 调用传递的数据....

我已经在我的 MVC 控制器中实现了以下代码

[HttpPost]
public string tt(string o)
{            
    return o;
}

[HttpPost]
public string tt2(string o)
{
    return "lala";
}

我正在从浏览器触发以下 ajax 调用

$.ajax({
    url: "/Home/tt2",
    type: "POST",
    contentType: "application/json;",
    data: JSON.stringify({ o: 'asdas'}),     
    success: function(e){console.log(e+'    correct');},
    error: function(e){console.log(e+'    incorrect');}
});

$.ajax({
    url: "/Home/tt",
    type: "POST",
    contentType: "application/json;",
    data: JSON.stringify({ o: 'asdas'}),     
    success: function(e){console.log(e+'    correct');},
    error: function(e){console.log(e+'    incorrect');}
});

因此,当运行第一个 ajax 调用时,结果是

lala    correct

而对于第二个ajax调用,结果是

undefined    correct

同时,这些是我尝试过的一些东西

  • 在 ajax 调用中添加 dataType: "json",
  • 将字符串数据从{o: 'asdas'}更改为'asdas'
  • 删除JSON.stringify
  • charset=utf-8 添加到 contentType
  • 将ajax调用类型和MVC控制器方法从POST改为GET改为PUT
  • 将 MVC 控制器方法参数从 string 更改为 int
  • 从 ajax 调用中删除 error 方法
  • 将数据从 data: {o: 'asdas'} 更改为 data: {"o":"asdas"}
  • 将数据从 data: {"o":"asdas"} 更改为 data: JSON.stringify({"o":"asdas"})

我知道简单的字符串或 int 可以作为查询字符串通过 URL 传递,但在传递对象列表时会出现问题..

除此之外,对 URL 的调用是正确的,因为当我在被调用方法中设置断点时,它确实会被触发,但参数始终为 null..

关于如何使 ajax 调用起作用的任何想法?

【问题讨论】:

  • 看看这个working example
  • 我复制了你的例子,没有修改任何东西。它完美地工作。如果 FromBody 没有从 View 完美绑定,也许 FromBody 会修复它。
  • 我认为@WillyDavidJr 所说的是正确的,因为您的示例构建并且对我来说很好。
  • 那我猜是我用的框架吧?我正在使用.Net Core 2.0。 FromBody 工作,但没有它,它不起作用。我将更改方法的属性并将其更改为我需要使用的对象。非常感谢您的快速回复。
  • @ErikPhilips,创建表单也可以,但我更喜欢从 jquery 创建数据模型,而不必将表单元素放置到位。感谢您的帮助。

标签: c# jquery ajax asp.net-mvc


【解决方案1】:

尝试:

[HttpPost]
public string tt([FromBody]string o)
{            
    return o;
}

【讨论】:

【解决方案2】:

你的请求应该是这样的:

$.ajax({
            url: '@Url.Action("tt", "Home")',
            data: {
                "o": "asdasdas"
            },
            cache: false,
            type: "POST",
            success: function (response) {

            },
            error: function (xhr) {
            }
            });

【讨论】:

  • $.ajax({ url: "localhost:59807/Home/tt", type: "POST", contentType: "application/json; charset=utf-8;", dataType: "json", data: { "o": "asdas" }, 成功: 函数(e){console.log(e+'正确');}, 错误: 函数(e){console.log(e+'不正确');} });还是不行。
猜你喜欢
  • 2023-04-08
  • 1970-01-01
  • 2023-03-28
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-16
  • 2012-04-16
相关资源
最近更新 更多