【问题标题】:Ajax data post in ASP.NET Core 1 doesn't pass valuesASP.NET Core 1 中的 Ajax 数据发布不传递值
【发布时间】:2016-12-01 19:06:16
【问题描述】:

从数据字段传递数据时,如何使用 Ajax 发布数据?问题似乎是我的数据没有正确发布到控制器,因为我试图用硬编码的数字替换实际的数据属性,但仍然无法发布该数字。这是我的 ajax 调用:

                $(".js-toggle-attendance")
                .click(function(e) {
                    var button = $(e.target);
                    $.ajax({
                            url: "/api/attendances/",
                            method: "POST",
                            contentType: "application/json",
                            data: 'gigId : button.attr("data-gig-id")',
                            dataType: "json"
                        })
                        .done(function() {
                            button
                                .removeClass("btn-default")
                                .addClass("btn-info")
                                .text("Going");
                        })
                        .fail(function() {
                            alert("Something failed!");
                        });
                });
        });
</script>

我的控制器动作如下:

        [HttpPost]
    public IActionResult Attend(AttendanceDTO dto)
    {

而 AttendanceDTO 只是一个简单的数据传输对象类:

    public class AttendanceDTO
{
    public int GigId { get; set; }
}

我已经为 data 方法尝试了以下变体,Chrome Dev Tools/Network Request payload 中的内容如下(我点击了 id=1 的按钮):

    data: 'gigId : button.attr("data-gig-id")'--> gigId : button.attr("data-gig-id")
    data: { "gigId": button.attr("data-gig-id") } --> gigId=1
    data: button.attr("data-gig-id") --> 1      No Properties
    data: "2" --> 2    No Properties

在所有情况下,调试控制器操作都会将 dto 字段显示为 0。

更新: 我添加了 [FromBody] 标记并 JSON 对数据进行了字符串化,现在似乎正在发布正确的数据。但是,上面的 fail 方法一直在执行。我更新了代码以提取错误消息,如下所示:

                $(".js-toggle-attendance")
                .click(function(e) {
                    var button = $(e.target);
                    $.ajax({
                        url: "/api/attendances/",
                        method: "POST",
                        contentType: "application/json",
                        data: JSON.stringify({ "gigId": button.attr("data-gig-id") }),
                        dataType: "json",
                        success: function() {
                            button
                                .removeClass("btn-default")
                                .addClass("btn-info")
                                .text("Going");
                        },
                        error: function(error) {
                            var x = error;
                            alert("Something failed!");
                        }
                    });
                });

以及我能够从 Chrome 开发工具中捕获的错误消息:

error = Object {readyState: 4, responseText: "", status: 200, statusText: "OK"

更新以解决上述问题: 只需要删除 dataType: "json" 因为服务器没有推回 json。

【问题讨论】:

    标签: jquery ajax asp.net-web-api asp.net-core asp.net-ajax


    【解决方案1】:

    您没有将您的操作参数声明为[FromBody]

    [HttpPost]
    public IActionResult Attend([FromBody]AttendanceDTO dto)
    {
    }
    

    应该可以解决问题。至于数据,{ "gigId": button.attr("data-gig-id") } 应该是正确的格式,尽管您可能需要在传递之前将其转换为 json 字符串。

    【讨论】:

      【解决方案2】:

      我通过添加 GigId 遇到了同样的问题:button.attr("data-gig-id")。能够修复它 这可能会有所帮助

      $(document).ready(function() { 
              $(".js-toggle-attendance").click(function (e) {
                  var button = $(e.target);
      
                  $.post("/api/attendances", { GigId: button.attr("data-gig-id") })
                      .done(function() {
                          button
                              .removeClass("btn-default")
                              .addClass("btn-info")
                              .text("Going");
                      })
                      .fail(function() {
                          alert("something failed !");`enter code here`
                      });
              });
          });
      

      【讨论】:

        【解决方案3】:

        如果它对其他人有帮助,我有一个没有无参数构造函数的 DTO,并且之前的 ASP.NET Core 用来抛出异常,而 ASP.NET Core 没有,它只是给你一个空对象

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-07-14
          • 2020-08-23
          • 1970-01-01
          • 2017-11-21
          • 1970-01-01
          • 2017-04-18
          • 1970-01-01
          • 2020-02-13
          相关资源
          最近更新 更多