문제

먼저, 여기서 나와 함께하십시오. 맞춤형 모델 바인더가있어 양식 데이터를 사용자 정의 객체에 성공적으로 매핑합니다. 이 모델 바인더 내에서는 항목을 다른 사용자 정의 객체에 맵핑합니다. 내가 할 수 있어야 할 것은이 두 번째 매핑을 처리하기 위해 별도의 모델 바인더를 만드는 것입니다. 이것은 단순화 된 버전입니다.

맞춤 개체 :

public class Category
{
    public int CategoryId { get; set; }
    public string Name { get; set; }
    public string Status { get; set; }
    public string Description { get; set; }
    public IEnumerable<SubCategory> SubCategories { get; set; }
}

public class SubCategory
{
    public int CategoryId { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public string Status { get; set; }
}

내 양식이 하위 범주에 대한 많은 ID를 전달하는 경우, 내가해야 할 일은 데이터 리포지토리로 실행되고 하위 범주 객체를 수화시키는 것입니다. 양식에서 하위 범주 목록은 다음 형식으로 제출됩니다.

<input type="text" name="Name" value="This Category" />

<input type="hidden" name="subcat.Index" value="0" />
<select name="subcat[0].Id">
    <option value="1">Something</option>
    <option value="2">Something else</option>
</select>

<input type="hidden" name="subcat.Index" value="1" />
<select name="subcat[1].Id">
    <option value="1">Something</option>
    <option value="2">Something else</option>
</select>

<input type="hidden" name="subcat.Index" value="2" />
<select name="subcat[2].Id">
    <option value="1">Something</option>
    <option value="2">Something else</option>
</select>

카테고리를 매핑하기 위해 사용자 정의를 작성하는 것은 분명히 간단합니다. 모델 바인더를 작성하는 것은 하위 카테고리 (모델 바인더 내에서 내 데이터 저장소를 실행할 것입니다)는 조금 어려운 것으로 입증됩니다.

내가 이것을 얼마나 분명하게 만들었는지 잘 모르겠습니다.

도움이 되었습니까?

해결책

이것에 대해서는 모델 바인더가 저장소의 엔터티 유형이 아닌 프리젠 테이션 모델을 구성해야한다는 것입니다. 모델 바인더는 양식의 키/값 모음에서 프레젠테이션 모델로 매우 간단한 매핑이어야하며, 대부분 스칼라 값이나 목록 인 다른 유형과의 관계가있는 스칼라 값인 프레젠테이션 모델로 매우 간단해야합니다. 저장소에서 엔티티 인스턴스를 실현해야한다는 것은 발견 한 것처럼 많은 합병증이 추가됩니다.

또한 불필요합니다. 프레젠테이션 모델 사용에는 다음을 포함하여 많은 장점이 있습니다.

  • 프레젠테이션 모델에는 해당 필드 만 포함되어 있기 때문에 사용자가 업데이트 할 수있는 필드를 화이트리스트에 올릴 필요는 없습니다.
  • 기본 모델 바인더는 가장 복잡한 모델 바인딩 시나리오를 제외하고는 모두 작동합니다. 실제로, 사용자가 보는 값이 조건부 방식으로 다른 값에 묶여 있어야 할 때만 사용자 정의 모델 바인더 만 사용하면됩니다. 프리젠 테이션 모델을 사용할 때 프리젠 테이션 모델의 구조는 페이지의 구조와 일치해야하므로 구조적 이유로 사용자 정의 모델 바인더를 사용할 필요가 없습니다.
  • 데이터베이스 또는 엔티티 모델을 작성하기 전에 뷰와 컨트롤러를 만들 수 있습니다. 즉, 최종 시스템을 만들기 위해 많은 양의 작업을 수행하기 전에 디자인에 대한 고객 구매를받을 수 있습니다. 이는 엔티티 모델이 발생하기 전에 구조적 문제를 분류하는 데 도움이됩니다. 고객이보고 싶다고 생각하는 페이지와 일치하는 프리젠 테이션 모델 만 만들고이 프레젠테이션 모델의 구성 인스턴스를 사용하여 페이지의 일반적인 개요를 구축하고 고객에게 보여줍니다. 행복한 경우 저장소/엔티티 모델을 작성하고 LINQ 쿼리를 작성하여 프레젠테이션 모델에 매핑 할 수 있습니다.

따라서 귀하의 예에서, 하위 범주는 정수 목록으로 양식 컬렉션에서 나옵니다. 따라서 프레젠테이션 모델에는 동일한 정수 목록이 있어야합니다. 컨트롤러에서 바인딩 후 프리젠 테이션 모델에서 모델 값을 저장소에서 구체화 된 범주 인스턴스로 전송하는 메소드를 호출 할 수 있습니다.

다른 팁

나는 이것을 살펴 보는 것이 좋습니다 노래 장어 게시물, 다른 접근법의 예를 제공합니다. 샘플 StateFuloBjectBinder 접근법을 사용하면 데이터베이스에서 검색 해야하는 비즈니스 객체의 모음을 바인딩 할 수 있습니다. 컨트롤러가 Imodelbinder를 구현하므로 저장소에 액세스 할 수 있으며 필요한 객체를 수화하여 객체 수집에 추가하는 데 사용할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top