2012-02-21 2 views
0

100 개가 넘는 필드가있는 다소 큰 SQL 데이터베이스 테이블에 바인딩하려고합니다. 기본적인 CRUD 작업을 수행하고 있으며 편집 할 때는 페이지 길이를 관리하기 쉽고 사용자 친화적으로 유지하기 위해 편집을 두 페이지 (보기)로 나누기로 결정했습니다. Entity Framework와 함께 MVC 3 (C#)을 사용하여 데이터베이스를 매핑합니다.MVC 3 모델이 긴 테이블의 절반에 바인딩

내 질문 - 각 ActionResult에서이 테이블의 "절반"에 바인딩하려면 어떻게해야합니까? 두 가지 문제가 있습니다. 부분 클래스와 MetadataType 특성을 사용하여 대부분의 입력을 확인합니다. 한 페이지에서 다른 페이지에 대한 필드의 유효성을 검사하지 않도록 유효성 검사를 어떻게 분할합니까? 둘째, 어떻게 테이블의 속성 중 절반에만 바인딩합니까? 많은 것은 nullable이 아니며 해당 양식 입력없이 바인드하려고하면 데이터베이스 오류를 유발합니다.

내 두 ActionResults에서 [Bind (Include = "...")] 또는 [Bind (Exclude = "...")]를 사용할 수 있지만 꽤 비논리적이며 비 DRY로 표시 될 수 있음을 알고 있습니다. include 또는 exclude 태그에서 50 개의 개별 필드. 이 작업을 수행하는 더 좋은 방법이 있습니까?

+1

ViewModel 클래스를 사용하여 해당 페이지에서 편집 할 수있는 데이터를 나타낼 것을 고려 했습니까? 그런 다음 AutoMapper를 사용하여 엔터티와 ViewModel 간의 속성 매핑을 처리 할 수 ​​있습니다. – epignosisx

+0

이 ViewModel 클래스는 분명히 전체 테이블에 대한 EDM 클래스에서 상속받지 못했습니다 (또는 여전히 "나머지 반"에서 필드를 바인딩하려고 시도합니다) ... 그래서이 클래스를 테이블에 다시 바인딩하는 것을 어떻게 알 수 있습니까? ? – Sylver

+0

Entity와 ViewModel은 별도의 클래스입니다. 하나는 다른 하나로부터 상속받지 않습니다. 한 클래스의 각 속성을 다른 클래스에 수동으로 매핑해야합니다. 지루한 작업이지만 AutoMapper를 사용하여 매핑을 처리 할 수 ​​있습니다. – epignosisx

답변

0

내가 이것을 잘못 이해했다고 생각합니다 ... MVC 모델 바인딩이 결국 부분 바인딩을 허용하는 것처럼 보이는 테스트를 마친 것 같습니다.

1

글쎄, 다양한 옵션이 있습니다. 먼저 뷰에 고유 한 전용 뷰 모델이 필요합니다. 다른 모델에서 이러한 속성을 복제해야하는 DRY를 위반하는 것처럼 보일 수 있지만 현실은 View Models 및 Data Models가 두 가지 용도로 사용되므로 서로 다른 관심사입니다. 당신은 그들을 분리시켜야합니다.

각보기에 대해보기 모델의보기에서만 사용중인 속성 만 배치하면됩니다.

둘째, 데이터 모델이 점진적인 업데이트에 도움이되지 않으면 단일 업데이트를 수행 할 수 있도록 각보기의 데이터를 어딘가에 저장해야합니다.

임시 테이블에 저장할 수도 있고, 데이터를 직렬화하여보기의 숨겨진 필드에 저장할 수도 있습니다. MVC Futures 프로젝트는 도움이되는 편리한 HTML 도우미를 제공합니다. 어느 쪽이든, 부분 편집을 할 수 있도록 작업을 해체해야합니다.

+0

임시 테이블을 만들어야한다면 긴 "Include"또는 "Exclude"목록을 작성하고 ActionResult 특성으로 처리 할 수도 있습니다. – Sylver

+0

@ Silver - 데이터 모델과 뷰 모델은 다른 관심사입니다. 이를 수행하는 올바른 방법은 뷰 모델입니다. 나는 그것이 많은 일처럼 보이지만, 장기적으로는 더 유지 보수가 가능하고보다 견고합니다. –