2009-11-02 3 views
4

여기서 내 검색을 통해 해결책을 찾을 수 없다는 상황이 있습니다. 시나리오는 다음과 같습니다.asp.net MVC를 사용한 페이징 검색 결과 MVC

2 개의 필수 입력란과 여러 개의 선택 입력란이있는 검색 양식이 있습니다. 양식은 어떤 필드가 선택되었는지를 결정하는 동작 방법에 게시하고 검색 조건과 일치하는 개체 목록을 구성합니다 (<). 그런 다음 해당 목록 <>을 표시 할보기로 전달합니다.

이 문제는 asp.net mvc에서 페이징을 수행하는 방법과 관련이 있습니다. 과거 프로젝트의 경우 "페이지"매개 변수뿐만 아니라 쿼리 매개 변수를 포함하는 링크를 만드는 사용자 정의 HTML 도우미를 사용했습니다. 그런 다음 GET 요청과 .Take(). Skip() 형식을 사용합니다.

검색 조건에 GET 요청을 사용할 수 없어서이 프로젝트의 벽에 부딪혔다. 목록에 "<> 목록을 유지하는 방법을 찾아 낼 수 없어서"페이지 " 매개 변수 트릭.

세션에 List <을 저장하려고 생각했지만 개체와 목록이 매우 클 수 있습니다.

나는 이것이 고급 검색 양식에 대한 대중적인 문제라고 생각 하겠지만 좋은 해결책을 찾을 수없는 것 같습니다. 어떤 도움을 주시면 감사하겠습니다. 감사!

+0

페이징을 수행하고보기 자체에서 사용할 도우미 또는 확장 프로그램을 작성하지 않으시겠습니까? 내 머리 꼭대기에서 이야기하고 있습니다. 감사합니다. –

답변

3

에서 찾을 수 있습니다 어떻게 검색 결과 객체를 캐싱 등과 고유 한 키를주는 약. 그런 다음 페이징 링크가 고유 한 (SearchID)를 참조하게하고 작업에서 해당 개체를 찾아서 캐시에서 가져오고 거기에서 Skip/Take를 가져옵니다.

이렇게하면 모든 요청에 ​​대해 개체가 다시 작성되지 않으므로 페이지로드가 훨씬 빨라지고 데이터베이스/응용 프로그램의 부담이 줄어 듭니다.

다음

http://aspnet.4guysfromrolla.com/articles/100902-1.aspx

는 캐싱 등에 대한 비디오입니다 :

http://www.asp.net/learn/Videos/video-6206.aspx

참고 : 여기에

는 캐싱 등에 관한 기사입니다 당신이 캐시 된 개체에 만료 날짜를 지정해야합니다.

+0

매우 도움이되는 링크, 감사합니다! –

+0

좋은 접근 방식이라고 생각하지 않습니다. – Andrei

+0

@AndreiMikhalevich 데이터 원본을 다시 쿼리하지 않으려는 경우 더 나은 방법이 있습니까? – Alexandra

1

필수 입력란, 선택 입력란, 페이지 링크 등 모든 것을 같은 양식에 입력하십시오.

두 가지 가능성 :

는 사용이 페이지 링크를 각각 갖는 다른 이름을 버튼이나 이미지 대신 앵커 태그를 제출
  1. (예 page1page2, ...) :이 수 당신이 원하는하려면 양식을 제출할 때 페이지
  2. 양식 안에 숨겨진 필드를 넣으십시오. 그런 다음 모든 페이지 앵커에 자바 스크립트 클릭 핸들러를 추가하십시오. 이 핸들러는 숨겨진 필드의 값을 페이지로 업데이트하고 양식을 제출하고 이벤트를 취소합니다.

그래서 호출기 링크 중 하나를 클릭하면 목록 및 호출기 링크를 작성하는 데 필요한 모든 데이터가 포함 된 양식이 제출됩니다.

+0

모든 양식이 동일합니다. 내 동작 메서드에서 모든 선택적 매개 변수를 nullable로 만들고 필요한 필드에 대해 간단한 유효성 검사를 수행합니다. 또한 검색 기준으로 객체를 필터링하는 데 사용하는 논리가 꽤 무거 우므로 모든 페이지마다 전체 재전송을 피하려고합니다. 응답 해 주셔서 감사합니다! –

+0

그래서 문제가 무엇입니까? –

+1

문제는 쿼리 문자열을 사용하지 않고 새 페이지가 요청 될 때마다 목록을 다시 작성하지 않고 물체를 페이지 목록에 넣을 수 있어야한다는 것입니다. 가능한 경우 확실하지 않습니다. –

2

제대로 이해하면 검색 결과를 한 번로드 한 다음 페이지를 넘기고 싶을뿐입니다.

jQuery 페이징 기능을 살펴 보셨습니까? 전체 목록을 페이지에 덤프하고 JavaScript를 사용하여 페이징을 처리하고 원하는 경우 정렬 할 수 있습니다.

http://beckelman.net/demos/jqueryTableSorterConPaging/default.aspx

+0

감사합니다. 아마도 이것이 제가 할 방향 일 것입니다. JavaScript가 없어도 궁금할까요? –

+2

JavaScript를 사용하지 않으려면 다른 답변에서 설명한대로 일종의 캐싱을 사용해야하고 서버에 페이지 변경 사항을 전달해야합니다. GET을 피하기 위해 양식과 POST에서 페이징 링크를 래핑하면됩니다 .Take(). 원래 검색에서 캐시를 건너 뜁니다(). –