2017-12-09 27 views
3

내 배열에 내 컨트롤러에 배열 배열을 게시하려고하지만 params가 null입니다. 컨트롤러 객체에 [FromBody]를 넣어야하는 간단한 객체 만 보았습니다. .ASP.NET 코어 게시 배열 객체 JSON

public class ReceiveTime 
{ 
    public string openTime { get; set; } 
    public string closedTime { get; set; } 
    public string id { get; set; } 
} 
: 여기
[HttpPost] 
public void ReceiveAll([FromBody]ReceiveTime [] rt) { } 

내 클래스 : 여기
function SendAllDay() { 
    var mesJours = {}; 
    var monJour = []; 
    mesJours.monJour = monJour; 

    var senddata =''; 

    $('div[id^="Conteneur"]').each(function() { 
     var idDiv = $(this).attr("id"); 
     var jour = idDiv.substr(9, idDiv.length - 9); 
     var opentps = $("#O" + jour).val(); 
     var closetps = $("#C" + jour).val(); 
     var monid = $("#id" + jour).val(); 

     monJour = { 
      openTime: opentps, 
      closedTime: closetps, 
      id: monid 
     } 

     mesJours.monJour.push(monJour); 
    }); 

    $.ajax({ 
     url: '@Url.Action("ReceiveAll")', 
     dataType: 'json', 
     type: 'POST', 
     //data: JSON.stringify(monJours), 
     data: JSON.stringify(mesJours), 
     contentType:'application/json', 
     success: function (response) { 
      console.log('ok'); 
      //window.location.reload(); 
     }, 
     error: function (response) { 
      console.log('error'); 
      //alert(response) 
      //window.location.reload(); 
     } 
    }); 
} 

내 지침 :

여기
{ 
    "monJour": [ 
    { 
     "openTime": "04:00", 
     "closedTime": "21:30", 
     "id": "0" 
    }, 
    { 
     "openTime": "08:00", 
     "closedTime": "17:30", 
     "id": "1" 
    }, 
    { 
     "openTime": "08:00", 
     "closedTime": "17:30", 
     "id": "2" 
    }, 
    { 
     "openTime": "08:00", 
     "closedTime": "17:30", 
     "id": "3" 
    }, 
    { 
     "openTime": "08:00", 
     "closedTime": "17:30", 
     "id": "4" 
    }, 
    { 
     "openTime": "08:00", 
     "closedTime": "17:30", 
     "id": "5" 
    }, 
    { 
     "openTime": "08:00", 
     "closedTime": "17:30", 
     "id": "6" 
    } 
    ] 
} 

내 아약스 요청입니다 : 여기

내 JSON입니다

도움을 주신 데 감사드립니다.

답변

2

ReceiveTime[] rt을 사용하는 대신 POST와 동일한 구조로 데이터를 모델링하는 것이 좋습니다. 예를 들어, 다음과 같습니다 클래스를 만들 수 있습니다

public class MesJours 
{ 
    public ReceiveTime[] MonJour { get; set; } 
} 

MesJours는 클래스 이름 (나는 프랑스어를하지 않음)로 의미가 있다면 나도 몰라,하지만 아이디어는 여전히 분명하다 - 당신을 네가 좋아하는 수업에 이름을 지을 수있다.

이를 감안할 때,이 같은 컨트롤러를 업데이트 할 수 있습니다 :

[HttpPost] 
public void ReceiveAll([FromBody] MesJours mesJours) 
{ 
    // Access monJour via mesJours. 
    var rt = mesJours.MonJour; 
} 

이는 ASP.NET MVC 모델 바인더를 만족시킬 것이다 당신에게 당신이 게시 한 데이터를 제공해야합니다. 또한 POST에 추가로 필요한 속성을 쉽게 수용 할 수 있다는 이점이 있습니다.

+0

가 지금 일하고있어 감사합니다 :) – Shikei

1

ajax js 요청의 이름은 백엔드 컨트롤러의 매개 변수 이름과 일치해야합니다.

다음과 같이 컨트롤러 메서드 시그니처를 업데이트하십시오 :

public void ReceiveAll([FromBody]ReceiveTime [] monJour)

또한, 나는 프랑스 언어를 좋아하더라도, 당신이 변수를 명명 영어 사용에 제안하고 싶습니다. 어쨌든 기분을 상하게하지 말고 정말로 권장합니다.

+1

데이터 매개 변수를 포함하는 라인의 구문을 기록해 둡니다 팁 주셔서 감사합니다 :) – Shikei

0

1.Add 클래스, Mesjours : 컨트롤러 액션 변경 작업 (aspnetcore에 대한) 비동기하는 반환 형식보기 3.in

[HttpPost] 
public async Task<IActionResult> ReceiveAll([FromBody]MesJours mesJourData) 
{ 
    var rt = mesJourData.MonJour; 
} 

에서

public class MesJours 
{ 
    public ReceiveTime[] MonJour { get; set; } 
} 

2.And 만들 게시 된 데이터가 컨트롤러 동작의 매개 변수와 동일한 이름을 가지고 있는지 확인하십시오 (이 경우 mesJourData). 아약스 방법

$.ajax({ 
     url: '@Url.Action("ReceiveAll")', 
     dataType: 'json', 
     type: 'POST', 
     data:{mesJourData: mesJours} , 
     contentType:'application/json', 
     success: function (response) { 
      console.log('ok'); 
      //window.location.reload(); 
     }, 
     error: function (response) { 
      console.log('error'); 
      //alert(response) 
      //window.location.reload(); 
     } 
    });