2017-04-04 3 views
0

I MVC3 컨트롤러 액션이 있습니다는 ASP.NET MVC3에 문자열의 배열을 게시 할 수 없습니다

public ActionResult DoStuff(DoStuffModel model) 

DoStuffModel은 다음과 같습니다

public class DoStuffModel 
{ 
    public long SomeId { get; set; } 
    public List<string> Codes { get; set; } 
} 

을 내가 할 내 jQuery를 년을 이 :

var postData = { 
    SomeId: 1, 
    Codes: ["code1", "code2", "code3"] 
}; 

$.post(url, postData, function (data) {}); 

URL이 정확합니다. enter image description here

SomeId

가 제대로 바인딩됩니다 만, Codes가 null 남아 :이처럼 postData 외모는 내가 로그인 할 때. 무슨 일 이니?

+0

이 될 것입니다. 귀하의 모델은 코드라고하는 배열을 필요로하지만 귀하의 dev-tools에서는 자바 스크립트 객체에서 배열 이름이 PiCodes임을 보여줍니다. 그게 도움이되는지 확인해 주시겠습니까? – MarioMucalo

+0

그냥 추측 해 보았지만'public string [] Codes {get; 세트; }' –

+0

내 부분에 잘못된 스크린 샷이 있습니다. 죄송합니다. 그러나 이름은 일치합니다. – ohyeah

답변

1

$.ajax() 방법을 사용하고 올바른 아약스 옵션을 설정하고 데이터를 문자열 화해야합니다. 예를 들어

var postData = { SomeId: 1, 'Codes[0]': 'code1', 'Codes[1]': 'code2', 'Codes[2]': 'code3'}; 

코드가 포함 된 현재 개체를 사용하여 -

$.post() 방법은 당신이 그것을 바인딩 DefaultModelBinder 위해서는 인덱서와 컬렉션을 생성해야 의미 application/x-www-form-urlencoded; charset=UTF-8로 데이터를 전송한다 배열은

$.ajax({ 
    url: url, 
    type: 'post', 
    contentType: 'application/json', 
    data: JSON.stringify({ model: postData }) 
    success: function(data) { 
     .... 
    } 
}); 
+0

도움을 주셔서 감사합니다! 그러나'[0] .Codes'는 올바른 구문으로 보이지 않습니다. 내 Intellisense는 적어도 그것에 대해 불평하는 것 같습니다. – ohyeah

+0

죄송합니다. 따옴표를 잊어 버렸습니다 (이 경우에는 코드 [0] '을 사용하십시오. –

+0

) JSON을 보내므로'Codes [0]'을 사용할 필요가 없습니다. OPs 원본'postData'는 정확했으며'application/json' 헤더가 누락되었습니다. –

관련 문제