2011-05-04 1 views
0

내 코드에 이상한 버그가 있습니다. 이름을 바꿀 항목의 동적 목록을 표시하는보기 페이지가 있습니다. 몇 가지 ID ints, 이전 이름 ​​및 새 이름 가진 몇 가지 목록을 보유하는보기 모델이 있습니다. 보기에서 for 루프를 사용하여 각 항목에 대한 레이블과 텍스트 상자를 만듭니다. 또한 사용자가 해당 항목의 이름을 바꾸지 않도록 선택할 수있는 텍스트 상자 옆에 확인란이 있습니다. 이 확인란에는 텍스트 상자의 비활성화 된 속성을 토글하는 onclick가 있습니다.MVC - 첫 번째 문자열이 전환 된 텍스트 상자에있을 때 양식에서 문자열 목록을 제출하십시오.

<%for (int i = 0; i < Model.ChargeIds.Count; i++) 
       { %> 
      <div style="clear:left; float:left; margin-right:10px"> 
       <label><%=Model.OldChargeNames[i]%></label>     
       <div class="editor-field"> 
        <%=Html.TextBoxFor(m => m.NewChargeNames[i])%> 
        <%=Html.CheckBoxFor(m => m.DoNotCopyFlags[i], new { onclick = "toggleElement('NewChargeNames_" + i + "_')" })%> 
        <label>Don't Copy</label> 
       </div> 
      </div> 
      <%} %> 
<script type="text/javascript"> 
     function toggleElement(element) { 
      document.getElementById(element).disabled = !document.getElementById(element).; 
     }; 
    </script> 

목록의 첫 번째 항목 옆에있는 확인란을 클릭하고 제출할 때까지 모든 것이 잘 작동합니다. 내 'NewChargeNames'목록이 null로 돌아옵니다. 다른 텍스트 상자 중 하나를 사용하지 않으면 첫 번째 텍스트 상자 만 비활성화됩니다. 내 토글 기능을 변경하여 텍스트 상자의 스타일을 다시 해제하여 비활성화 된 것으로 보았습니다. 이제는 정상적으로 작동합니다. 하지만이 버그가 왜 발생하는지 전혀 모릅니다. 아무도 빛을 낼 수 있습니까?

+0

document.getElementById (element) .disabled =! document.getElementById (element) .; .disabled로 끝내기로되어 있습니다. –

+0

네, 죄송합니다, 복사 및 붙여 넣기 작업이 잘못되었습니다 : ( – Joe

답변

0

IE는 비활성화 된 컨트롤의 양식 값을 제출하지 않습니다. 나는이 상황이 여러 번 발생하여 두 가지 해결해야했습니다

  1. 다시 활성화 비활성화 컨트롤 의 형태의 태그의 onsubmit 이벤트를.
  2. 비활성화 된 값 컨트롤의 값을 숨겨진 양식 필드에 배치하십시오.

나는 이것이 "버그"라고 생각하지 않지만 IE가 다양한 상태의 양식 필드를 처리하는 방식의 기능이라고 생각합니다.

+0

비활성화 된 항목의 가치를 원하지만 비활성화 된 텍스트 상자의 첫 번째 항목을 사용하면 전체 목록이 null이됩니다. 두 번째와 같은 여전히 ​​일했다. 제안을 주셔서 고마워, 내가 처음 시도 할 것, 그것은 더 나은 솔루션을 내 CSS를 기반으로 것 같습니다. – Joe

관련 문제