2016-06-17 2 views
0

원하는 경우 고객이 편집 할 수있는 형식을 개발했습니다. 내 로컬 응용 프로그램에서 양식을 업데이트하려고 할 때 이지만 웹 사이트에서 공식을 업데이트하려고하면이 실행되는 즉시 오류가 발생합니다. 오류가있는 코드는 다음과 같습니다.서버가 로컬 응용 프로그램과 다른 방식으로 작동하는 것 같습니다.

objectCollection = db.SelectFragebogen(sid, cbControls, tbControls); 
objectCollection.RemoveAt(0); 

try 
{ 
    for (int i = 0; i < (cbControls.Count + tbControls.Count); i++) 
    { 
     if (i < cbControls.Count) 
     { 
      if ((bool)objectCollection.ElementAt(i) != cbControls.ElementAt(i).Checked) { cbUpdate.Add(cbControls.ElementAt(i)); } 
     } 
     else 
     { 
      if ((string)objectCollection.ElementAt(i) != tbControls.ElementAt(i - cbControls.Count).Text) { tbUpdate.Add(tbControls.ElementAt(i - cbControls.Count)); } 
     } 
    } 
    db.UpdateFragebogen(sid, cbUpdate, tbUpdate); 
} 
catch (Exception ex) 
{ 
    System.Diagnostics.Debug.WriteLine(ex.Message.ToString()); 
    Response.Redirect("EmptySite.aspx"); 
} 

db.SelectFragebogen은 데이터베이스에서 전체 형식을 선택합니다. RemoveAt는 폼의 ID를 제거합니다. cbControls는 체크 박스 요소 목록이고 tbControls는 Textbox 요소 목록입니다. 그들은 제대로 채워지고 있다고 확인했습니다.

이제 "이전 값"이 저장되는 objectCollection과 "새로운"값이있는 컨트롤 목록 2 개가 있습니다. for 루프는 이제 이전 값과 새 값을 비교하고 추가 컬렉션 (cbUpdate 및 tbUpdate)에 변경 사항을 기록합니다. 왜냐하면 나는 업데이트 된 내용을 알 필요가 있기 때문입니다.

내가 말했듯이, 내 로컬 응용 프로그램에서 이것을 실행하면 모든 것이 잘되고 문제없이 작동합니다. 내 웹 사이트에서 양식을 업데이트하려고하면 오류가 발생합니다.

오류는 "인덱스가 범위를 벗어났습니다."- 오류입니다.

+0

'ex.Message.ToString()'은 중복됩니다. 'ex.ToString()'이나 전문 로깅 프레임 워크를 선호해야합니다. 또는 더 나은 : 사용자에게 오류를 보여줍니다. –

+0

하지만 오류 메시지가 독일어로 표시됩니다. 제대로 번역 할 생각이 없습니다. –

+0

'objectCollection'에는 여러분이 생각한만큼의 요소가 없다고 생각합니다. –

답변

1

try 블록을 디버그하고 IndexOutOfRange 예외를 throw하는 행을 확인한 후 i 값을 확인하십시오. 아마 헤더의에서

(cbControls.Count + tbControls.Count) - 1 

(cbControls.Count + tbControls.Count) 

변경과 같이 간단합니다.

+0

글쎄, 네가 옳았다. 이제 다소 당황 스럽다 : D –

관련 문제