2012-06-14 5 views
1

MvcContrib 호출기를 사용하여 그리드를 사용하고 있지 않습니다. 나는 호출기 (그래서 쉽게 결과의 상단과 하단에 표시 할 수 있습니다)에 대해 생성 된 부분도 있고, 그것은뿐만 그래서 @Html. Pager 메소드를 호출 :MvcContrib 호출기 - 페이지 크기 변경

@Html.Pager(Model.PagedPrograms).First("<<").Last(">>").Next(">").Previous("<").Format("Item {0} - {1} of {2} ") 

이 모든 한 추가 조정이없이 작동 매개 변수는 QueryString을 통해 페이지로 전달됩니다. Pager는 URL에서 해당 매개 변수를 다시 작성한다는 것을 알고 있기 때문입니다.

I는 사용자에게 (예를 들어 20, 50, 모두) ... 내가 쉽게 컨트롤러 끝에 그것을 처리 할 수있는 페이지 크기를 변경할 수있는 옵션을 제공하고 싶습니다, 내가

@if (Model is Foo) { 
    @Html.ActionLink<SearchController>(sc => sc.Foo(var1, var2, var3, 20), "20") 
    @Html.ActionLink<SearchController>(sc => sc.Foo(var1, var2, var3, 50), "50"); 
    @Html.ActionLink<SearchController>(sc => sc.Foo(var1, var2, var3, -1), "All"); 
} 
같은 것을 쓸 수

하지만이 호출기를 사용할 수있는 각 모델 유형에 대해이 작업을 수행해야합니다.이 작업을 너무 과소 평가하거나이 작업을 완전히 거쳐야 할 수도 있지만, 누군가에게 통찰력이 있는지 묻고 싶다고 생각했습니다.

현재 페이저는 IPagedProgramList (IPagination<ProgramDTO> { get; })을 제공하는 뷰에서만 호출되며,이 인터페이스를 구현하는 두 개의 ViewModel (간단한 검색 및 고급 검색)이 있습니다. 그러나이 프로젝트가 성장하고 해당 인터페이스를 사용하는 새로운 ViewModels을 추가하면 호출기 부분 뷰를 업데이트해야합니다. 잘못된/확대/축소되지 않습니다.

+1

페이지 크기를 제어하는 ​​HTML ''태그를 사용할 수 없습니까? 요소에'pageSize'의 id를 주면 ActionResult에서 해당 매개 변수를 찾습니다 (nullable인지 확인하십시오). 그에 따라 페이지 크기를 설정하십시오. null 인 경우 기본값을 설정하십시오. –

+0

조금 까다 롭긴하지만 무언가를하고 있다고 생각합니다. jQuery를 사용하여 select를 사용하려고합니다. 'onchange (function() {$ (".pager a")} ... each (... // PageSize 매개 변수를 대체하십시오);});'그럴 수도 있지만 잘 모르겠다. 그것은해야한다. :) –

답변

1

외부에서 생각 나게하는 Ek0nomik의 고개를 끄십시오. 이 상자.

1 단계 : 호출기 컨트롤러를 사용할 모든 페이지가 POST가 아닌 GET을 통해 모든 매개 변수를 전달하는지 확인하십시오. 게시물을 어딘가에 받아 들여야하고 모든 매개 변수를 GET 메소드의 기본 유형으로 변환해야한다면 RedirectToAction을 사용하십시오.

2 단계 : .Link()을 호출기에 추가하는 것에 대해 걱정하지 마십시오. GET을 통해 모든 것이 들어 오면 괜찮습니다. 그것은 페이지의 URL을보고 앞뒤로 이동할 때 필요한대로 페이지 번호 매개 변수를 조정합니다.

3 단계 (선택 사항이지만 권장 됨) : 응용 프로그램 전체에서 일관성을 유지하려면 지원할 페이지 크기 목록을 정의해야합니다 (예 : Global.ascx.cs 파일). 제 경우에는 Dictionary<int,string>을 사용하여 -1PageSize 값으로 전달할 수 있지만 표시하려면 All (물론 데이터 레이어는 -1이 페이징을 비활성화한다는 것을 알아야합니다).

4 단계 : 자바 스크립트 함수 changePageSize 그렇게 간단 나는이 첫 번째 (주 생각하지 않았다 믿을 수 없었다 :

<ul class="pageSizeSelector"> 
     @foreach (KeyValuePair<int,string> kvp in MvcApplication.AVAIL_PAGE_SIZES) 
     { 
      <li><a href="#" onclick="changePageSize(@kvp.Key)">@kvp.Value</a></li> 
     } 
</ul> 

5 단계 : 호출기 부분도이 같은 추가 : jQuery가 필요하지 않습니다. 단지 이미 사용하고 있지 않은 경우를 위해서만 필요합니다.)

function changePageSize(size) { 
    var PSpattern = /PageSize=\d+/i; 
    var url = window.location.href; 
    url = url.replace(PSpattern, "PageSize=" + size); 
    window.location.href = url; 
} 

6 단계 (인터넷 트롤 제외) : 이익!

+0

엄밀히 말하면 HTML을 좋아하지만 JS는 피하면 MVC를 사용하여 현재 URL을 문자열로 가져온 다음 JS와 마찬가지로 'RegEx' 객체를 사용하여 PageSize를 대체 할 수 있습니다. 너의 독약을 골라. –