문제

첫 번째 후,

나는 MVC Abit와 함께 놀았습니다 ... 여러 입력 필드가있는 뷰가 있습니다.이 필드 중 일부는 게시물에 비워 질 수 있습니다.

게시물 컨트롤러 내부의 조치 메소드는 다음과 같은 것 같습니다.

public ActionResult Filter(int? id, string firstName, string lastName, bool? isMember)

데이터베이스에서 동적 LINQ 쿼리를 수행하기 위해 차고있는 DynamicQuery Extension을 사용해 왔으며 검색 객체에서 데이터 액세스 계층으로 전달되는 검색 객체에서 캡슐화했습니다.

그러나 입력 값과 쿼리 결과를 표시하기 위해보기로 다시 전달되는 사용자 정의 된 ViewData 객체가 있습니다.

검색 객체 속성과 ViewDatas를 모두 설정해야하므로 코드가 약간 불쾌하게 보입니다.

public ActionResult Filter(int? id, string firstName, string lastName, bool? isMember)  { 
var search = new Search { 
Id = id, 
FirstName = firstName, 
LastName = lastName, 
Member =  isMember 
}; 

var memberViewData = new MemberViewData { 
Id = id, 
FirstName = firstName, 
LastName = lastName, 
Member =  isMember
}; 

memberViewData.Results = _dataRepository.GetMember(search); 

return View("Search", memberViewData); 

}

나는 이것을 생각하고 실제로 값을 데이터 액세스 계층에 전달하고 컨트롤러의 ViewData를 채워야합니까, 아니면 내가 사용할 수있는 훨씬 더 우아한 패턴이나 연습이 있습니까?

이것이 덤프처럼 보이면 죄송합니다. 많은 사람들이 아이디어를 튕기는 것이 아니라 프레임 워크를 파헤 치기 위해 시간을 내십시오.

도움이 되었습니까?

해결책

Snippet MembiewData 클래스에 따르면 검색 클래스의 속성 외에 결과 속성이 있습니다. 따라서 첫 번째 단계는 검색에서 MemberViewData를 파생시키고 검색 인스턴스를 매개 변수로 받아들이고 기본 속성을 할당하는 생성자를 정의하는 것입니다. 다음으로 동작 방법을 변경합니다.

public ActionResult Filter(Search search)  
{ 
    return View("Search", new MemberViewData(search) 
    {
        Results = _dataRepository.GetMember(search)
    }); 
}

다른 팁

ModelBinder를 사용하여 데이터를 바인딩하십시오

Tadeusz가 언급 한 것처럼 ModelBinder는 귀하를 위해 MemberViewData를 구축하는 데 도움이 될 수 있으며 결과 만 가져올 수 있습니다.

또한이보기 데이터 객체를 구축하는 방법을 이해하고 간단히 위임하는 프레젠테이션 서비스를 작성하기로 결정할 수도 있습니다. 그래도 모델 바인더 접근 방식을 선호합니다.

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