2016-07-27 4 views
1

Как я могу получить данные POST с использованием Ajax при передаче данных из поля данных? Проблема кажется состоящей в том, что мои данные не попадают в контроллер правильно, потому что я попытался заменить фактический атрибут данных жестко закодированными числами и по-прежнему не могу отправить этот номер. Вот мой Аякса вызов:Сообщение данных Ajax в ASP.NET Core 1 не передает значения

   $(".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 Dev Tools/Network Request (я нажимаю кнопку с идентификатором = 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 Dev Tools:

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 Core нет, он просто дает вам нулевой объект

Смежные вопросы