2011-09-09 6 views
0

나는 C# asp.net MVC 프로젝트가 있습니다. 검색을 수행 중이며 검색 결과 중 하나의 세부 정보 페이지에서 검색 결과에 액세스하려고합니다.나중에 사용할 수 있도록 검색 결과 저장 - 결과보기에 액세스

이렇게하면 마지막 검색 결과의 다음 속성에 연결되는 세부 정보 페이지에 "< prev | next>"링크를 가질 수 있습니다.

내 접근 방식은 검색 결과 개체를 세션 변수에 저장하는 것이지만 실제로 액세스 할 코드를 파악할 수는 없습니다. 아래의 Session [ "SearchResults"]에서 감시 할 때 배열을 보유하고있는 것으로 보이는 "결과보기"에서 레코드를 볼 수 있습니다.

누군가 내가이 모든 잘못에 대해 생각하고 있다고 말하려고합니다. 나는 깨달을 때까지 기다릴 수 없습니다.

누군가 나에게 단지 공개 속성으로 저장소에 마지막 검색 결과를 저장해야한다고 제안했는데 그 것이 더 나은 옵션입니까? 아니면 누군가 내가해야 할 일을하는 데 더 좋은 방법을 추천 할 수 있습니까?

여기 내 컨트롤러

public ActionResult Search(int? page, Search search) 
{ 

    search.regusApi = Convert.ToBoolean(ConfigurationManager.AppSettings["regusApiLiveInventory"]); 
    Session["SearchResults"] = MeetingRoomRepositoryWG.Search(search).AsPagination(page ?? 1, 7); 

    return View(new SearchResultsWG { SearchCriteria = search, Locations = MeetingRoomRepositoryWG.Search(search).AsPagination(page ?? 1, 7) }); 
} 

public ActionResult NiceDetails(String suburb, String locationName, int id) 
{ 
     **Here I want to acceess the session variable** 

     return View(MeetingRoomRepositoryWG.RoomDetails(id).First()); 
} 

입니다 저장소에서 코드입니다 :

public static List<Location> Search(Search search) 
{ 

    String LongLatString = search.LongLat; 
    LongLatString = LongLatString.Substring(1, LongLatString.Length - 2); 

    var LonLatSplit = LongLatString.Split(','); 
    var latitude = Convert.ToDecimal(LonLatSplit[0]); 
    var longitude = Convert.ToDecimal(LonLatSplit[1]); 

    using (var context = new MyContext()) 
    { 
     var query = context.Locations.Include("Location_LonLats").ToList(); 

     query.OrderBy(x => (Convert.ToDecimal(x.Location_LonLats.Lat) - latitude) * (Convert.ToDecimal(x.Location_LonLats.Lat) - latitude) 
       + (Convert.ToDecimal(x.Location_LonLats.Lon) - longitude) * (Convert.ToDecimal(x.Location_LonLats.Lon) - longitude)); 

     return query; 
    } 
} 

답변

1

데이터가 당신에 대해 검색하지만, 그것은 더 나은 얼마나 큰 확실하지에 저장하지 검색 결과 모든. 그것은 매우 불충분하게 확장되고 리소스 호그가 될 것입니다. 예를 들어 상점을 왜? 사용자가 1 또는 3을 보지 않으면 500 페이지의 검색 결과가 나타 납니까? 세션 저장소에 이러한 잠재적으로 큰 결과 집합을 얼마나 오래 보관할 예정입니까? 몇 명의 사용자에게?

기본적으로 페이지 기반 검색을 수행하므로 기본적으로 클라이언트가 수행하는 "다음"검색을 다시 검색합니다. 검색이 너무 느리면 Lucene.net과 같은 좋은 색인 등이 도움이 될 수 있습니다.

+0

아직 사용자 수는 확실하지 않지만, 적절하다면 확장 성이 좋지 않을 수 있습니다. 검색을 통과하고 다음을 클릭 할 때 다시 수행하면 처음에 클릭 한 검색 결과를 알아야합니다. 내가 클릭 한 결과 번호를 검색 결과 페이지에 저장할 수 있다고 생각합니다. 페이지 매김을 통해 어떻게 검색 결과를 클릭했는지 알 수 있습니까? 이 정보를 가지고도 위와 같은 형식으로 검색 결과에 액세스해야합니다. (지금까지 할 수 없었던 검색 결과 ...) – iKode

+0

검색 매개 변수를 '다음'및 '이전'링크의 URL 또는 다음 및 이전 버튼이 양식을 구성하고 검색 매개 변수를 양식 데이터로 포함 시키십시오. Ajax 호출도 가능합니다. – Joppe

+0

검색 메서드가 IEnumerable을 반환하고 yield를 사용하여 데이터를 반환하면 Linq를 사용하여 훨씬 쉽게 페이지 매김을 수행 할 수 있습니다. 결과를 건너 뛰는 것만이 차선책이 될 것입니다. 어떻게 든 Skip 및 Take 매개 변수를 호출에 포함 할 수 있다면 가장 좋습니다. 검색 결과를 주문하는 것은 불행한 일로, 선주문해야합니다. – Joppe

관련 문제