문제

우리가 이와 같은 것이 있다고 가정 해 봅시다

public class Person
{
   public string Name {get; set;}
   public Country Country {get; set;}
}

public class PersonViewModel
{
   public Person Person {get; set;}
   public SelectList Countries {get; set;}
}

Automapper를 사용하여 사람에서 PersonViewModel로 구문 분석하는 데 수행 할 수 있습니까?

도움이 되었습니까?

해결책

이를 위해 Automapper를 사용하지 마십시오. 그만한 가치가 없습니다. 예를 들어, 유효성 검사 실패가 있고 양식을 다시 표시하는 경우 -Automapper가 여기에서 실행되지 않습니다 (일반적으로). 우리는 보통 두 개의 경로를갑니다.

  • 목록이 컨텍스트 별이 아닌 경우 일부 iselectlistprovider를 쿼리하는 htmlhelper를 작성하십시오. html.dropdownlist (). 선택한 IOC 컨테이너를 사용하여 PersonListProvider를 찾고 항목 목록에 대한 쿼리 및 드롭 다운 목록을 채 웁니다.
  • 목록이 컨텍스트에 따라 다르면 컨트롤러 동작에 목록을 구성하십시오.

다른 팁

새로운 (또는 업데이트 된) 사람 객체를 생성하고 반환하는 데 필요한 모든 보너스 정보가있는 PersonViewModel을 통해 사람을 견해로 보내고 싶은 것처럼 들립니다.

이것이 맞다면, 나는 당신이 automapper가 필요하다고 생각하지 않습니다. 내가 Automapper에 대해 이해하는 것에서 관련 객체를 더 많은 뷰 모델 유형의 상태에 매핑하는 것이지만,이 경우, 당신은 사람을 고객에게 보내고 사람을 다시 받으려고 노력하고 있습니다. 이 경우 뷰 모델을 사용하여 페이지를 채우는 것이 더 쉬운 것처럼 보이지만 페이지를 대신에 반환하도록하십시오 (또는 뷰 모델에서 업데이트 된 사람을 추출하여 몇 개의 키 스트로크를 저장하십시오).


편집 : 그렇습니다. 예, automapper를 사용하여 정보를 이동할 수 있어야합니다. 이 쉬운 시나리오를위한 불필요한 계층입니다.

선택하면 다음을 수행 할 수 있습니다.

public class Person
{
   public string Name {get; set;}
   public Country Country {get; set;}
   public Country[] GetCountries 
   {
    ... add method for countries here
   }
}

그런 다음 ViewModel에서 해당 컬렉션에서 선택 목록을 가져올 수 있습니다.

public class PersonViewModel
{
   public Person Person {get; set;}
   public Country[] Countries {get; set;}
   public SelectList Countries { get{ .. add new select list code here getting vals from Countries..}}
}

다시 말하지만, 이것은 컨텍스트 민감한 목록을위한 것입니다. 그러나 당신은 여기서 비트를 비트에 비난하고 있습니다 (사람이 국가 목록을 가져야합니까?)

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