2011-05-10 4 views
4

데이터베이스 검색 기능을 구현해야하는 MVC3 웹 응용 프로그램이 있습니다. 보기에서 컨트롤러로 검색 매개 변수를 가져올 수 있도록 내 검색 양식에 대한 ViewModel 클래스를 만듭니다. 나는 성공적으로 (검색 쿼리를 포함하고 확인란을 사용자가 검색 범위를 좁힐하고자하는 경우) 내 모든 검색 매개 변수를 얻을 내 컨트롤러 클래스와 저장소 패턴이 후MVC3의 ViewBag에 대한 대안

var searchResult = _repository.GetItems(searchParms, chkbox1, chkbox2, ..., chkbox10) 

를 사용하여 데이터베이스에서 데이터를 검색, 내의 SearchResult을 전달하고 있습니다

var paginatedSearchResult = new PaginatedList<Items>(searchResult, page ?? 0, pageSize); 

같은 매김 도우미에 나는

return View(paginatedSearchResult) 

문제는, 내가 직면하고 나의보기 페이지에서 BES를 검색된 데이터입니다 표시하고 데이터베이스에서 데이터를 가져오고, 사용자가 검색 한 내용을 볼 수 있도록 내보기 페이지에서 검색 쿼리 문자열과 주제 (어떤 확인란이 사용되었는지)를 표시해야합니다. 이 문제에 대한 적절한 해결책을 찾지 못해서 ViewBag를 사용해야했습니다. 그리고 이제 내 Controller 페이지는 10 개 이상의 ViewBag로보기 흉하게 보입니다. 나는 거기에 좋은 해결책이 있어야하지만 그것을 발견 할 수 없다는 것을 알고있다. 어떤 제안도 높게 평가 될 것이다. 강력 뷰 모델 클래스를 입력 할 때 MVC에서 viewbag에 대한 대안 -

덕분에, ACS

답변

2

당신은 이미 너무 가까이 있습니다. 검색에 사용하는 ViewModel이 있으므로 뷰 모델을 만드는 방법을 분명히 알고 있습니다. 현재 ViewModel을 속성으로 사용하고 데이터베이스 검색 viewmodel을 속성으로 사용하는 새 ViewModel을 만듭니다.

 
public class SearchViewModel 
{ 
    public YourExistingSearchOptionsViewModel SearchViewModel {get;set} 
    public PaginatedList SearchResults {get;set;} 
} 

분명히 매우 거친 -하지만 잘하면 거기에 아이디어를 얻을.

+0

감사합니다. 내 안에 3 개의 속성이있는 새로운 NewViewModel을 만들려고했습니다. 첫 번째는'MyOriginalViewModel (검색 쿼리를 검색하는 데 사용)', 두 번째는'PaginatedList (페이징 검색)', 세 번째'DBItems (모든 레코드가 들어 있음)'입니다. 그래서'View (paginatedSearchResult) '를 반환하는 대신'View (NewViewModel)'을 반환하고 내 View Page에서 다음을 수행합니다. '@model IEnumerable '. 그러나 컴파일 오류가 발생했습니다. 사전에 전달 된 모델 항목은 'NewViewModel'유형이지만 'Sys.Coll.Generic.IEnumerable' 유형의 모델 항목이 필요합니다. " . – ACS

+0

목록이 뷰 모델 내부에 있으므로 목록이 아닌 단일 개체를 반환합니다. ienumerable <>을 제거하고 @model을 사용하십시오. App.ViewModel.NewViewModel –

+0

IEnumerable 폼보기 페이지를 제거하면 기록 세트를 반복 할 수 없습니다. "App.ViewModel.NewViewModel '에'GetEnumerator '에 대한 공용 정의가 없기 때문에"app.ViewModel.NewViewModel 유형의 변수에서 foreach 문을 사용할 수 없습니다 "라는 경고 메시지가 나타납니다. 나는 정적 인 사용자 입력 외에도 뷰 페이지에서 반복 재생할 많은 레코드가 있습니다. 감사! – ACS

0

나는 당신의 제목입니다 의문을 강력한 형식 "을 ViewData"속성에 대한