2008-10-28 35 views

Trả lời

0

Tôi có lưới phân trang trong số Dynamic Data for MVC sample application của mình, nhưng lưới được vẽ bằng tay. Các dữ liệu được sử dụng PagedList, mà đến từ Rob Conery (người lần lượt tôi nghĩ rằng đã nhận nó từ ScottGu).

Tôi đã suy nghĩ về những gì một helper paged-lưới có thể trông như cho MVC ...

+0

Vâng Brad, tôi đã cố gắng tránh sử dụng một số điều khiển trước khi nướng khiến họ có thể có một số biểu mẫu web mã hóa trong đó. Những gì chúng ta cần nướng vào tương lai có thể là trình trợ giúp Html.PageNavigation (...) cần nhiều đối số .. từ số lượng bản ghi, tổng số bản ghi, lớp css, v.v. hoặc thậm chí là một PagedList (mà tôi cũng sử dụng rộng rãi .. cùng với LazyList (gật đầu với Rob Con) .Tôi đã bắt đầu viết một điều khiển người dùng xem PageNavigation: ViewUserControl có thể được bỏ bất cứ nơi nào trên bất kỳ khung nhìn nào. có thể không có –

3

Nếu bạn đang tạo một bảng dữ liệu từ dữ liệu JSON, Tôi rất khuyên bạn nên sử dụng thành phần DataTable YUI (Yahoo UI Library) DataTable (http://developer.yahoo.com/yui/datatable/). Nó phân trang rất tốt và bạn có tùy chọn trả về toàn bộ bộ bản ghi để bắt đầu và sau đó phân trang thông qua tất cả phía máy khách hoặc trả về một tập hợp phân trang từ máy chủ.

Có lẽ sẽ không phù hợp với kịch bản của bạn, nhưng chỉ nghĩ rằng tôi muốn đề cập đến nó.

0

Điều tôi đã thực hiện để phân trang cho đến nay là tạo điều khiển Máy nhắn tin, Phải có url phân trang, id phần tử html để cập nhật, số trang, kích thước trang và tổng số.

Url phân trang có dạng điều khiển/hành động mà hành động trả về một chuỗi html (trang trả lại dữ liệu)

Các pager gắn thêm một danh sách các liên kết javascript cho các trang. Các liên kết này gọi hàm jQuery dựa trên ajax để truy cập url phân trang. Mỗi lần nhấp vào trang sẽ thay thế nội dung hiện tại của phần tử html bằng kết quả của cuộc gọi ajax. Something như thế này:

public string Render() 
{ 
    var buffer = new StringBuilder(1000); 
    buffer.AppendLine(@"<ul class=""datatable_pager"">") 
     .AppendLine("\t<li>Additional Pages:</li>"); 
    int numberOfPages = TotalItemCount % PageSize == 0 ? TotalItemCount/PageSize : TotalItemCount/PageSize + 1; 

    for(int i = 0; i < numberOfPages; i++) 
    { 
     AppendPageLink(buffer, i); 
    } 

    buffer.AppendLine("\t</ul>"); 
    AppendPagingJS(buffer); 

    return buffer.ToString(); 
} 

private void AppendPageLink(StringBuilder buffer, int i) 
{ 
    buffer.Append("\t\t<li><a href=\"") 
    .Append(PagingLink.Replace("$PAGE$", i.ToString())) 
    .Append("\">") 
    .Append(i.ToString()) 
    .Append("</a>") 
    .AppendLine("\t\t</li>"); 
} 


private void AppendPagingJS(StringBuilder buffer) 
{ 
    buffer.AppendLine(@" 
     <script type=""text/javascript""> 
     function page(page, size, updateElement) 
     { 
      $.post('" + PagingUrl + @"', 
       { 
        pageNumber: page, 
        pageSize: size, 
       }, 
       function(response) 
       { 
        $(""#"" + updateElement).html(response); 
       }, 
       ""html"" 
      ); 
     } 
     </script>"); 
} 

Các bài viết javascript để url phân trang, do đó hành động sẽ cần phải sau đó làm điều gì đó như:

int.TryParse (Request.Params [ "PAGENUMBER"], ra khỏi trang) int.TryParse (Yêu cầu.Params ["pageSize"], ra kích thước))

và sử dụng kết quả với các thành phần truy cập dữ liệu của bạn để lấy trang dữ liệu, hiển thị dưới dạng html và trả về.

Hy vọng điều đó sẽ giúp ích, tôi có thể mở rộng nếu cần.

Các vấn đề liên quan