2012-10-21 4 views
0

나는 양식을 가지고있는 게시물이 값 :Mvc4 기본 모델 바인더 - 사전

조사 [0] .KEY 75

조사 [0] .Value 4

조사 [1] .KEY 76

조사 [1] .Value 4

내가 사전 유형에 매핑하는 기본 모델 바인더를 사용하려고 해요 :

[HttpPost] 
public ActionResult CompleteSurvey(Dictionary<int, int> answers) 
{ 
... 
} 

하지만 InvalidCastException이 발생합니다. 지정된 캐스트가 유효하지 않습니다.

왜 ??

답변

0

설문 조사를 삭제하고 자체적으로 반복 (즉, [0] .Key)하여 바인딩을 적용한 이상한 이유가 있습니다.

나는이 기사에 내 지식을 토대로 한 : http://www.hanselman.com/blog/ASPNETWireFormatForModelBindingToArraysListsCollectionsDictionaries.aspx 다음 잘못된 것으로 나타나는 ??? 또는 이전 버전의 MVC를 참조합니까 ???

+0

이것은이 버그가 수정되었으므로 변경되었을 가능성이 있습니다. http://connect.microsoft.com/VisualStudio/feedback/details/636647/make-jsonvalueproviderfactory-work-with-dictionary-types-in-asp-net- mvc - 당신은 아마도 단순한 JSON 객체를 사용할 것이다. 참고 : MVC4에서이 새로운 기능을 테스트 할 기회가 없었으므로 현재 MVC3 해결 방법을 사용하고 있습니다. http://stackoverflow.com/questions/4710729/post-json-dictionary/5397743#5397743 –

+0

답변을 주셔서 감사합니다. 스트레이트 바인딩. JSON이 없습니다. – Bartosz

+0

글쎄, 그게 무슨 뜻이야 - 그 버그 수정에 따라 이제는 해결 방법을 건너 뛰고 .Key/.Value 해킹이나 커스텀 직렬화 대신에 JS 오브젝트를 제출하고 다른 끝에서 사전을 얻을 수 있어야한다. 마구 자르기. –

1

Im 다만 추측하지만 나는 당신의 주장이 '설문 조사'가 아니라 '대답'이라고 불렀기 때문이라고 생각합니다. 파이어 버그 또는 크롬에서 쉽게 할 수있는 게시물 헤더를보고 메소드에 게시되는 것을 살펴 봐야합니다. '전선을 통해'전송되는 내용을 검사 할 때 더 유용합니다.

캐스트가 유효하지 않은 이유는 아마도 모델 바인더가 작업을 수행하려고 할 때 시나리오 응답이 null이기 때문일 수 있습니다. 사전 대신 formscollection을 사용했다면 게시 한 모든 것이 있음을 알 수 있습니다.

관련 문제