2012-08-23 3 views
5

우리는 MVC에서는, CheckBoxForvalue="true"checkboxvalue=falsehidden를 생성 할 것이라는 점을 알고있다. 두 입력 컨트롤 모두 동일한 이름을 공유합니다.JSON 데이터에 형태의 체크 박스를 직렬화하는 방법

상자가 선택되어 있지 않으면 양식에서 잘못된 값을 POST 할 수 있기 때문에 매우 적합합니다. 그리고 모델 바인더는 확인란이 true를 반환 할 때 숨겨진 입력을 무시합니다.

하지만 이제 양식 데이터를 JSON 형식의 WebAPI 컨트롤러로 보내기 위해 양식 제출 이벤트를 재정의했습니다.

양식 데이터를 직렬화 할 때 확인란과 숨김 간의 관계를 올바르게 구문 분석 할 수있는 메커니즘이 없습니다. 따라서 선택을 취소하면 false이 반환되며 이는 정상입니다. 그러나이 옵션을 선택하면 serializeArray() 함수가 input을 거치며 두 값이 같은 이름을 가지기 때문에 true 대신 {true, false}을 반환합니다.

질문 : 문제를 해결하는 가장 좋은 방법은 무엇입니까?

+0

가능한 복제본 [ASP.Net MVC 4의 WebAPI가 올바르게 확인란을 바인딩하지 않습니까?] (http://stackoverflow.com/questions/11996285/asp-net-mvc-4s-webapi-does-not-bind- 체크 박스 - 올바르게) –

답변

1

이 문제의 해결책은 단일 < 입력 형식 = "checkbox"/ > 태그를 렌더링하는 자체 HtmlHelper 메서드를 작성하는 것이 었습니다. 다른 솔루션은 너무 해킹 된 것처럼 보였습니다.

dotPeek 또는 .NET Reflector를 사용하여 Microsoft Team에서 HtmlHelper.CheckboxFor 메서드를 만든 방법을 확인할 수 있습니다.이 작업을 수행하는 데 도움이 필요하면 도움이됩니다.

"bool"매개 변수에 일치하는 매개 변수가 컨트롤러에 전송되지 않은 경우 MVC 작업 매개 변수에서 예외가 발생하지 않도록 2 태그 접근 방식을 사용했습니다 (체크되지 않은 확인란은 값을 보내지 않음).