2009-08-13 4 views
3

나는 한 무리의 필드를 포함하고 또한 List를 포함하는 Client dto를 가지고있다.복잡한 모델 바인딩

이제는 쉽게 바인딩 할 수 있으며 모든 주소가있는 클라이언트가 표시됩니다. 문제는 사용자가 주소를 동적으로 삭제하고 추가 할 수 있다는 것입니다.

각 주소를 둘러싼 양식을 추가하는 방법을 생각했지만 내부 양식으로 끝나기 때문에 브라우저가 잘 작동하지 않는다는 것을 알고 있습니다.

그렇다면 자바 스크립트 사용을 고려해 보았지만 주소가 제거되면 모든 색인을 검토하고 색인 (주소 [0] .City)을 변경해야합니다. 색인이 순서가 맞지 않으면 action에 ClientForm을 매개 변수로 사용하면 연속 인덱스가 있고 0부터 시작하는 주소 만 ClientForm.Addresses 목록에 포함됩니다.

구현하기 쉬운 다른 솔루션은 무엇입니까? 내가 놓친 게 있니?

답변

1

양식 태그가 아닌 각 주소에 다른 이름으로 제출 버튼을 배치하면 외부 양식에서 특정 버튼이 있는지 확인하고 올바른 작업으로 리디렉션 할 수 있습니다 (예 : 주소 1 편집, 삭제 주소 3 등)

jquery 유효성 검사를 사용하는 경우 모든 "하위"제출 단추의 유형을 "취소"로 설정해야 유효성 검사가 발생하지 않습니다.

HTH,

댄 페이지에 각 주소가 addresses.Index라는 숨겨진 양식 필드를 제공하기 위해

+0

에 의해 더욱 상세하게 설명이 솔루션 난 당신이 무슨 뜻인지 이해하지 확인 : "당신의 외부 형태가 존재하지 않는지 확인하실 수 있습니다 ...."짧은 예는 좋은 것입니다. – sirrocco

1

,이 정수 값을 취할 것입니다. ASP.NET MVC 모델 바인더 (버전 2 이상)는 addresses.Index 양식 필드의 여러 값을 받고 정수 값을 사용하여 어떤 addresses[index].property 필드 값이 논리적으로 함께 속하는지 결정합니다.

예.

addresses.Index = 0 
addresses.Index = 3 

은 ... 찾아 갈

addresses[0].City 
addresses[0].Street 
addresses[3].City 
addresses[3].Street 

을 모델 바인더를 묻는 메시지 ... 그리고 두 요소와 컨트롤러 액션에 ICollection<Address>을 채 웁니다.

페이지에서 이러한 레코드를 삭제하고 삽입 할 수 있다면 자바 스크립트는 전역 변수에 사용할 다음 인덱스를 추적해야하므로 여러 행에 대해 동일한 인덱스를 다시 사용하지 않아야합니다 (즉, 주소 요소 등을 저장하는 테이블의 길이에만 의존하십시오.)

Phil Haack here.

+0

인덱스가 정수 일 필요는 없습니다. 맞습니까? 나는 정수가 된 이드와 같은 고유 한 값을 사용하고있었습니다. 그렇게하면 고유 한 상태를 유지하기 위해 클라이언트에 인덱스를 할당 할 필요가 없었습니다. – Benjamin