2012-05-09 2 views
0

체크 박스에서 값을 컨트롤러에 게시하는 매우 이상한 경우가 있습니다. 내 뷰 모델의MVC 3에서 체크 박스 값이 true가 아님

부 : 내보기의

public class BeslutIStortViewDTO 
{ 
    public BeslutIStortDTO BeslutIStort { get; set; } 
    public BeslutIStortListorDTO SelectListor { get; set; } 
} 

public class BeslutIStortDTO 
{ 
    public int id { get; set; } 
    public bool Ok { get; set; } 
    ... other stuff 
} 

부분 :

되지 않은, 모든 일에 상자가 좋아 보인다 컨트롤러에 전달 된 문자열에서
<div id="colOk" class="kolumn_header"> 
    @Html.LabelFor(model => model.BeslutIStort.Ok) 
    @Html.CheckBoxFor(model => model.BeslutIStort.Ok, new { @class = "rensa", tabindex = 5 }) 
</div> 

:

BeslutIStort.Ok=false 

BUT! 나는 그것을 검사 할 때 : 문자열에 두 번

BeslutIStort.Ok=&BeslutIStort.Ok=false 

그것을, 첫 번째는 oterh이 false이며, 값이없는, 그래서 모두 잘못이다. 나는 당연히 하나만을 기대할 것이고 그 하나는 true 일 것이다.

또 다른 흥미로운 발견은 acutal 렌더링 된 HTML에서, 체크 박스는 다음과 같습니다이다 :

<input class="rensa" id="BeslutIStort_Ok" name="BeslutIStort.Ok" tabindex="5" type="checkbox" value="true" /><input name="BeslutIStort.Ok" type="hidden" value="false" /> 

그것은 숨겨진 필드가 있습니다!

내가 서버에 값을 게시 할 때, 나는 아약스와 함께 할, 데이터 매개 변수를 다음과 같이 정의된다 :

나는 사람이에 도움이 되거 나에게 도움이 될 희망
data: $("#BisData").serialize(), 

하고, 내가 그것을 밖으로 냈다는으로 === 해결

=== :-) 내 컨트롤러 일부 "true"로 점점 도움이 같은 자바 스크립트했다 :.

$ (". rensa")를 발을 ("");

확인란이 작동하지 않습니다. 나는 이것을 다음과 같이 추가했다 :

$ (". rensaCheckbox"). attr ("checked", false);

체크 박스의 경우 이제 작동합니다.

+0

#BisData는 양식 태그 ID입니까? – Thulasiram

+0

예 it________ – kaze

+0

k .. 경고 추가 ($ ("# BisData"). serialize()); 이 출력을 여기에 입력하십시오 ... – Thulasiram

답변

1

이 아닌가요 이상한 중 ...
면도기 엔진이 자동으로 동일한 이름과 사용 적 형태로 내부 거짓 값으로 숨겨진 필드를두고 있기 때문에이 값을 두 번 BeslutIStort.Ok=&BeslutIStort.Ok=false 을 받았다 모든의 첫번째 @Html.CheckboxFor()
확인란을 선택하지 않아도 false 값이 반환되도록이 작업이 수행됩니다.

초 ... 입력 (확인란) html 컨트롤에 값이 없으므로 null 값이 수신됩니다. 값을 반환하려면 다음 코드를 추가하십시오.

<div id="colOk" class="kolumn_header"> 
    @Html.LabelFor(model => model.BeslutIStort.Ok) 
    @Html.CheckBoxFor(model => model.BeslutIStort.Ok, new { @class = "rensa", tabindex = 5,value="true" }) 
</div> 
+0

생성 된 HTML을 . 그러나 불행히도 직렬화 할 때와 동일합니다. – kaze

+0

u는 당신이 다음과 같은 것을 의미합니다 ... BeslutIStort.Ok = & BeslutIStort.Ok = false –

+0

예, 선택했을 때. 확인하지 않을 때, BeslutIStort.Ok = false 일뿐입니다. – kaze

관련 문제