문제

나는 사람들이 행동이나 관점에서 어디에서 선택 목록을 만들고 있는지 궁금합니다.

나는 두 가지의 예와 나에게 가장 의미가있는 예가 행동에서 그것을하는 것이며보기 모델에 selectList 유형의 속성을 갖는 것입니다.

반면에, 사람들이보기 모델에 SelectList의 속성을 가지고 있고 SelectList가보기 모델 (생성자 또는 게으른로드를 통해) 내에 채워진 예를 보았습니다. 나는 내 행동에 코드가 적다는 것을 의미하기 때문에이 아이디어를 좋아한다 ...

간단히 말해서 나는 사람들이 ATM을하는 일을 궁금해하고있었습니다.

Anthony를 건배합니다

도움이 되었습니까?

해결책

컨트롤러에서 SelectList를 만들고 (모델 저장소에서 항목 목록을 찾아서) ViewData 객체 또는 강하게 유형 된 ViewModel의 일부로보기로 전달하십시오.

다른 팁

그것은 프리젠 테이션 별 측면이므로 HTML 도우미를 사용하여보기에서 그것을 선호합니다. 그래서 나는 컬렉션을보기에 전달하고 HTML 헬퍼 방법을 사용하여 항목을 선택 목록에 매핑합니다. 이 방법은 다음과 매우 흡사 할 수 있습니다.

public static IList<SelectListItem> MapToSelectItems<T>(this IEnumerable<T> itemsToMap, Func<T, string> textProperty, Func<T, string> valueProperty, Predicate<T> isSelected)
{
    var result = new List<SelectListItem>();

    foreach (var item in itemsToMap)
    {
        result.Add(new SelectListItem
        {
            Value = valueProperty(item),
            Text = textProperty(item),
            Selected = isSelected(item)
        });
    }
    return result;
}

문안 인사.

일반적으로 액션 또는 서비스 계층에서 SelectList를 작성하여 ViewData를 통해 내보기로 전달합니다. 또한보기 모델과 강력하게 입력 한보기의 일부로 만들었습니다. 두 가지 방법은 작업 또는 서비스 계층에서이를 만듭니다.

SelectList는보기 모델에서 속성으로 노출되어 필요한 저장소를 사용하여 작업에 채워집니다. 저장소와 직접 상호 작용하는 코드는 컨트롤러 동작 또는 서비스 계층 또는 기타이든 인기를 담당하는 코드가되어야한다고 생각합니다.

보기 모델에서 직접 목록을 채우는 것이 좋은 아이디어라고 생각하지 않습니다. 뷰 모델이 저장소 종속성을 갖고 데이터베이스 상호 작용을 수행해야하며 View 모델은 이러한 종류의 일에 책임이 없어야하기 때문입니다.

여러 selectlist 필드가 있고 액션 코드를 클리너를 유지하려는 경우 모든 채우기 및 초기화를 수행하는 이니셜 라이저 또는 이와 비슷한 별도의 특수 객체를 만들 수도 있습니다.

별도의 클래스로 만들지 않고 여기를보십시오. 사후 조치에서 뷰 모델을 도메인 모델에 다시 맵핑하는 방법은 무엇입니까?

나는 컨트롤러에서 iBuilder 인터페이스를 사용 하고이 빌더의 구현에서 엔티티/뷰 모델의 모든 빌딩을 수행합니다.

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