2016-07-27 66 views
1

如何在从数据字段传递数据时使用Ajax POST数据?问题似乎是因为我的数据没有正确发布到控制器,因为我试图用硬编码的数字替换实际的数据属性,并且仍然无法POST该数字。这里是我的Ajax调用:ASP.NET Core 1中的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; } 
} 

我曾尝试以下数据方法的变体,以及Chrome开发工具/网络请求有效负载中的内容如下(我点击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

UPDATE: 我加入了[FromBody]标签和JSON字符串化的数据,正确的数据似乎被发布现在。但是,上面的失败方法一直在执行。我更新的代码拉如下错误信息:

   $(".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" 

UPDATE上面FIX问题: 只需要删除dataType:“json”,因为服务器没有推回json。

回答

1

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

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

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

1

我通过添加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` 
       }); 
     }); 
    }); 
0

在情况下,它可以帮助别人,我有一个DTO不带参数的构造函数和预ASP.NET核心用完就扔上的异常,而ASP.NET核心没有,它只是给你一个空对象