2008-10-28 52 views

回答

0

我在我的Dynamic Data for MVC sample application中有一個分頁網格,但網格是手工渲染的。這些數據使用了來自Rob Conery的PagedList(他反過來我認爲是從ScottGu那裏得到的)。

我一直在思考什麼分頁格幫手可能看起來像MVC ...

+0

是的布拉德,我試圖避免使用一些預烘烤的控件,因爲他們可能有一些webforms代碼。我們需要烘焙到期貨中的可能是Html.PageNavigation(...)助手,它需要大量的參數..從記錄數量,記錄總數,css類等,或者甚至只是一個PagedList(我也使用廣泛..與LazyList一起(向Rob Con點頭)。我已經開始編寫一個PageNavigation:ViewUserControl 視圖用戶控件,它可以放在任何視圖的任何位置。可能沒有 – 2008-10-28 05:54:35

3

如果從JSON數據創建數據表,我強烈推薦YUI(Yahoo UI Library)DataTable組件(http://developer.yahoo.com/yui/datatable/)。它的分頁效果非常好,您可以選擇返回整個記錄集,然後通過所有客戶端進行分頁或從服務器返回分頁集。

可能不適合你的場景,但只是想我會提到它。

0

我所做的分頁迄今爲止是創建一個尋呼控制, 它需要一個分頁url,更新的html元素id,頁碼,頁面大小和總數。

分頁鏈接的形式控制器/動作在動作返回一個HTML字符串(數據所呈現的頁面)

尋呼機追加了頁面的JavaScript鏈接的列表中。這些鏈接調用一個基於jQuery的ajax函數,該函數命中分頁url。每個頁面點擊都會用ajax調用的結果替換html元素的當前內容。 事情是這樣的:

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>"); 
} 

JavaScript的職位,以尋呼URL,這樣的行動將需要再像做:

int.TryParse(Request.Params [ 「PAGENUMBER」],走出頁) int.TryParse(Request.Params [「pageSize」],out size))

並將結果與​​您的數據訪問組件一起抓取數據頁面,將其呈現爲html並返回它。

希望有幫助,如有需要,我可以擴展它。