2014-07-21 2 views
0

은 ASP.NET MVC 뷰에서 모델 항목의 총 수를 가져올 수 없습니다 :내가 호출기를 렌더링하기 위해 다음 코드를 사용하고

@Html.BootstrapPager(Request.QueryString("Page"), Function(index) Url.Action("Index", "Posts", New With {.page = index}), 14000, System.Web.Configuration.WebConfigurationManager.AppSettings("PageSize"), 15) 

내 문제는 내가 대신 Model.Count를 사용하는 경우 14000 다음 나는 단지 건너 뛰기를 사용하고 오직 필요한 레코드를 가져 오기 위해 저장소에서 가져 오기 때문에 레코드의 1 페이지를 얻습니다. 뷰에서 현재 게시 된 레코드의 총 수에 액세스하여 뷰에 값을 하드 코딩 할 필요가 없습니다.

원래 호출기 코드 is here. 나는 이것을 VBNET으로 변환했다. 레코드 수가 하드 코드 된 경우 잘 작동합니다. 통과 한 다음 컨트롤러에서 둘 다 전화 - 원하는 페이지를 얻기 위해 하나의 총 수를 얻기 위해 한 - 당신은 두 개의 서로 다른 하위 계층의 메소드를 필요

Dim posts As IEnumerable(Of PostSummaryDTO) 
     Using db As BetterBlogContext = New BetterBlogContext 
      posts = db.be_Posts.OrderByDescending(Function(x) x.DateCreated).Select(Function(s) New PostSummaryDTO With {.Id = s.PostRowID, .PostDateCreated = s.DateCreated, .PostSummary = s.Description, .PostTitle = s.Title, .IsPublished = s.IsPublished}).Skip((Page - 1) * PageSize).Take(PageSize).ToList() 
      Return posts.ToList 
     End Using 
+1

'Model.Count'는 어떻게 설정 되나요? 실제 레코드 수를 얻기 위해 다른 repo 메소드가 필요한 것 같습니다. –

답변

2

:

은 REPO입니다 두 모델 모두 뷰에 대한 모델 결과입니다. 따라서 모델은 레코드 모음이 될 수 없습니다. 그것은 레코드 집합에 대한 속성과 개수에 대한 속성을 가진 개체 여야합니다. 둘 중 하나를 사용하거나 ViewBag을 사용하여 개수를 전달하십시오.

우리 사무실에는 데이터 액세스를 처리하기위한 비즈니스 로직과 저장소가 포함 된 서비스 계층이 있습니다. 저장소에는 특정 테이블에 대한 모든 레코드에 대한 액세스를 제공하는 IQueryable을 반환하는 단일 메서드가 있습니다. 그런 다음 저장소 메서드를 호출하고 다른 방식으로 사용하는 하나 이상의 메서드가 서비스에 있습니다. 이 경우 서비스에 GetTotalCount 메소드와 GetPage 메소드가있을 수 있습니다. 두 메소드 모두 동일한 저장소 메소드를 호출하여 동일한 IQueryable을 호출 한 다음 첫 번째 메소드는 Count을 호출하고 두 번째 메소드는 SkipTake을 호출합니다. SkipTake은 쿼리 실행을 강제하지 않으므로 두 번째 방법에서는 ToArray 또는 이와 비슷한 것을 호출합니다. 서비스에는 GetRecord 메서드가있어 ID를 전달하고 내부적으로 FirstOrDefault을 호출하여 일치하는 ID가있는 단일 레코드를 가져올 수 있습니다. 원하는 경우 서비스 및 저장소를 단일 클래스로 롤업 할 수 있지만 데이터 액세스에서 비즈니스 논리를 분리하는 것이 좋습니다.

+0

추가 필터링을 처리하는 서비스 계층이 있으므로 다른 호출을 통해 개수를 가져옵니다. –

+0

IQueryable을 사용할 수 없으므로 repo에서 레코드 수를 정수로 가져 와서 뷰로 전달하는 또 다른 메소드를 만들었습니다. 나는 다른 시간에 IQueryable을 다시 시도 할 것이다. –

관련 문제