2009-12-24 3 views
0

asp.net mvc보기에서 양식 안에 html 테이블이 있습니다. tablesorter jquery 플러그인도 사용하고 있습니다. 여기 jquery 작업 후 입력 컨트롤의 이름 특성을 다시 설정하는 방법

는 볼 수 있으므로, 텍스트 버튼을 갖는 제 2 열이 열이있다 (예 간략화) 테이블 코드

<table id=managersTable> 
<thead> 
    <tr> 
      <th>Manager</th><th>Remove</th> 
    </tr> 
</thead> 
<tbody> 
<tr> 
     <td>Manager 1<input type='hidden' name='updater.managers[0].Id' value=2313 /></td> 
<tr> 
     <td>Manager 2<input type='hidden' name='updater.managers[1].Id' value=3233/></td> 
     <td><input type='button' class=removeButtonManager value='Remove' name='remove' /></td> 
</tr> 
</tbody> 

이다.

$(document).ready(function() { 
     $(".removeButtonManager").live("click", function(event) { 
      var row = $(this).closest("tr").get(0); 
      $(this).closest("tr").remove(); 
      $("#managersTable").trigger("update"); 
      $("#managersTable").trigger("appendCache"); 
     }); 
    }); 

모든 것이 하나의 문제를 제외하고 완벽하게 잘 작동 : 나는 그렇게 엮은 버튼을 클릭 할 때이 코드를 사용하여 HTML 테이블에서 행을 제거합니다. 나는 "제거"버튼을 클릭하면이 행을 제거하지만 문제는 다음

name='updater.managers[0].Id' 

에 대한 지수는 현재 꺼져 있는지이고 당신이 해달라고하면 그것은 asp.net의 MVC 바인딩의 최신 버전처럼 보인다 귀하의 요소 색인 속성 (0,1,2, 등) 그것은 바인딩되지 않습니다.

그래서 만약 내가 그것의 0,1,2 원래로 완벽하게 작동하지만 내가 첫 번째 행을 삭제하면 나는 단지 목록 (1,2.) 및 asp.net mvc 실 거예요 바인딩이 개체 .

그래서 모든 행을 제거하면 아무런 문제가 없도록 행을 제거한 후에 각 요소의 [] 색인을 어떻게 재설정 할 수 있는지 알아 내려고 노력 중입니다. 항상 0부터 시작하는 연속 목록을 제공합니다.

답변

1

모든 요소를 ​​반복하고 ID를 수정해야한다고 생각합니다. 이런 식으로 뭔가 내가 혼합 뭔가를 가질 수있다, 그것은 바로 작동하지 않을 경우

$(document).ready(function() { 
    $(".removeButtonManager").live("click", function(event) { 
     var row = $(this).closest("tr").get(0); 
     $(this).closest("tr").remove(); 
     $("#managersTable").trigger("update"); 
     $("#managersTable").trigger("appendCache"); 
     $("#managersTable").find("input[type=hidden]").each(function(i){ 
      //this is the current input we're looping through 
      //i is the index 
      $(this).attr('name', 'updater.managers['+i+'].Id'); 
     }); 
    }); 
}); 

각 (http://docs.jquery.com/Utilities/jQuery.each#objectcallback)에 대한 문서를 살펴 보자 작동합니다. 즉의 형태로 인덱스의 목록으로 모델 바인더에 다시 게시 된 목록, 각

<input type='hidden' name='updater.managers.Index' value="0" />

처럼 숨겨진 입력 필드를 추가 할 수도 있습니다

+0

그래서이 부분적 일이 블로그 게시물의 마지막 부분을 참조 자세한 내용은

. 하나의 문제는 위의 경우, 어디에 (요소 0,1) 시작하려면 2 행이 있고 첫 번째 행을 삭제 (위의 코드를 후에 내가 한 요소가 있어야합니다) 요소에서 두 번째 행의 데이터를 가져옵니다 0 (완벽)하지만 나는 또한 모든 속성이 설정된 객체를 반환하는 두 번째 요소 (1)를 얻습니다. 어떤 아이디어? – leora

+0

나는 당신이 무슨 뜻인지 정말로 모르겠다. $ ("# managersTable"). find ("input [type = hidden]")는 배열을 반환하고 그 안에 두 개의 요소가 있습니까? 어쩌면 선택기가 더 구체적이어서 테이블 만 대상으로해야 할 수도 있습니다. 이 두 번째 객체에서 '모든 속성이 설정되었습니다.'라는 의미가 무엇인지 잘 모르겠습니다. –

+0

처음에는 2 개의 행 (요소 0 & 1)이 있습니다. 그런 다음 첫 번째 행에서 제거를 클릭하면 한 행만 남았습니다.내가 컨트롤러에 제출할 때, 나는 아직도 내 컨트롤러로 전송 된 두 개의 요소를 보았다. 첫 번째 요소가 "원본"행 2 (행 1이 삭제 되었기 때문에 의미가 있음)처럼 보입니다. 그러나 배열의 두 번째 요소를 속성 세트가없는 컨트롤러에 보냅니다. 나는 단순히 첫 번째 행을 삭제 한 후 첫 번째 행을 삭제 한 이유가이 요소가 전달되는 이유를 확실히 모르지만이 요소 (일종의 해킹)를 무시하는 코드를 추가했다. 추가하려면 하나의 요소 만 가져야한다. – leora

0

도움이되기를 바랍니다 [ 0,2,3 ...]. 그리고 컬렉션 모델 바인더는 연속 인덱스를 "시도"하는 대신 해당 인덱스를 반복합니다.

.Index 필드의 값은 숫자 또는 문자열 일 수 있습니다. (좋은 아이디어를 upvoted) http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

관련 문제