programing

Ajax를 ASP.net MVC 컨트롤러에 게시 - 개체 속성이 null입니다.

javajsp 2023. 3. 5. 09:29

Ajax를 ASP.net MVC 컨트롤러에 게시 - 개체 속성이 null입니다.

Ajax 포스트는 다음과 같이 구축되어 있습니다.

var myData = [
    {
        id: "a",
        name: "Name 1"
    },
    {
        id: "b",
        name: "Name 2"
    }
];

$.ajax({
    type: 'POST',
    url: '/myurl/myAction',
    data: { items: myData },
    dataType: 'json',
    error: function (err) {
        alert("error - " + err);
    }
});

또한 MVC 컨트롤러:

[HttpPost]
public JsonResult MyAction(MyClass[] items)
{

}

MyClass는 데이터의 단순한 표현입니다.

public class MyClass {
    public string Name {get; set; }
    public string Id {get; set; }
}

javascript가 투고 요청을 하면 컨트롤러 액션은 실제로 2개의 아이템을 수신하지만 이들 아이템의 속성(id, name)은 null입니다.

피들러에서 요청을 체크하면 본문은 다음과 같습니다.

Name                 | Value
items[0][Name]       | Name 1
items[0][Id]         | a
items[1][Name]       | Name 2
items[1][Id]         | b

제가 뭘 놓쳤나요?

제가 뭘 놓쳤나요?

예, 다음 문서를 보고 기본 모델 바인더가 바인딩 컬렉션에 기대하는 올바른 와이어 형식을 이해하십시오.즉, 다음과 같은 것이 아니라, 이것이 기능하기 위해서입니다.

items[0][Name]       | Name 1
items[0][Id]         | a
items[1][Name]       | Name 2
items[1][Id]         | b

payload는 다음과 같습니다.

items[0].Name       | Name 1
items[0].Id         | a
items[1].Name       | Name 2
items[1].Id         | b

불행히도 jQuery에서는 이 payload를 달성하기가 매우 어렵습니다.이러한 이유로 복잡한 오브젝트/어레이를 AJAX에서 서버로 전송하려면 JSON payload를 사용할 것을 권장합니다.

$.ajax({
    type: 'POST',
    url: '/myurl/myAction',
    data: JSON.stringify({ items: myData }),
    contentType: 'application/json',
    error: function (err) {
        alert("error - " + err);
    }
});

주의사항:

  • data: JSON.stringify({ items: myData })대신data: { items: myData }
  • 추가된contentType: 'application/json'
  • 제거했다dataType: 'json'

payload는 다음과 같습니다.

{"items":[{"id":"a","name":"Name 1"},{"id":"b","name":"Name 2"}]}

이 코드를 사용하여 문제를 해결할 수 있습니다.

$.ajax({
    url: '/myurl/myAction',
    data: { '': items },
    method: "POST",
    dataType: 'json',
    success: function (xhr, status, response) {
    },
    error: function (xhr, status, response) {
    }
});

[HttpPost]
public JsonResult MyAction(IEnumerable<MyClass> items)
{

}

언급URL : https://stackoverflow.com/questions/16547491/ajax-post-to-asp-net-mvc-controller-object-properties-are-null