网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 设计资源 > .Net编程 > 正文

ASP.NETMVC2.0在Tab页中实现异步无刷新分页【源码下载】

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务

概述【本文源码下载】
    很多地方都存在以Tab页来呈现数据的方式,比如网易、新浪、搜狐、QQ等知名的门户网站的首页,还有大家熟知的博客园首页,都是用了tab页来显示数据。大家之所以喜欢用Tab,因为它能大大的增加显示数据的空间,能在固定的空间中显示更多的数据。分页也是为了方便数据的显示,在应用系统中必不可少。这篇文章使用Jquery在ASP.NET MVC中使用Tab页,以及在Tab页中实现异步无刷新的分页功能。估计这个大家都会用得到的。

先介绍一个Jquery插件:Tab,可以到/uploadfile/201101/20/13221544399.jpg" />

看下本文的成果:
    效果图一

gggg

实现:
按照它的Demo,在ASP.net mvc项目中引入js和css,以及Jquery。我在ASP.net MVC的母板页中引入这些文件:

  1. <link href="http://www.cnblogs.com/Content/base/ui.all.css" rel="stylesheet" type="text/css" /> 
  2.     <script src="http://www.cnblogs.com/Scripts/jquery-1.4.1.js" type="text/javascript"></script> 
  3.     <script src="http://www.cnblogs.com/Scripts/ui.core.js" type="text/javascript"></script> 
  4.     <script src="http://www.cnblogs.com/Scripts/ui.tabs.js" type="text/javascript"></script> 

引入之后,参考它的Demo在MVC项目中View中使用Tab。 可以看到比tab自带的demo多来了一个getContentTab函数。他有两个参数,用于表示你要显示
哪个tab页的第几页数据。这里默认加载的时候,显示tabs-Shoes的第一页数据。

  1. <script type="text/javascript"> 
  2.        $(document).ready(function () { 
  3.            $("#tabs").tabs(); 
  4.            getContentTab('Shoes', 1); 
  5.        });  
  6.     </script> 
  7.  
  8.  
  9.      <div id="tabs"> 
  10.         <ul> 
  11.        
  12.             <li><a href="#tabs-Shoes" onclick="getContentTab('Shoes',1);">Shoes</a></li> 
  13.             <li><a href="#tabs-Electronics" onclick="getContentTab('Electronics',1);">Electronics</a></li> 
  14.             <li><a href="#tabs-Food" onclick="getContentTab('Food',1);">Food</a></li> 
  15.         </ul> 
  16.         <div id="tabs-Shoes"> 
  17.              
  18.         </div> 
  19.         <div id="tabs-Electronics"> 
  20.              
  21.         </div> 
  22.         <div id="tabs-Food"> 
  23.              
  24.         </div> 
  25.     </div>  

当然在定义View之前要先写好控制器的代码,很简单,基本上没有代码:

  1. public ActionResult ViewCategory() 
  2.     return View(); 
  3. }  

好了,下面开始我们重要的几步。显示table以及实现table的分页。这个demo的tab定义了三个tab页,每一页的table结构是一样的,所以我定义一个用户控件来实现table和分页。代码如下:

  1. <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MvcAjaxPaging.Models.ProductViewModel>" %> 
  2. <%@ Import Namespace="MvcAjaxPaging.HtmlHelpers"%> 
  3.      <table class="grid"> 
  4.         <thead> 
  5.             <tr> 
  6.                 <th>Product name</th> 
  7.                 <th>Category</th> 
  8.             </tr> 
  9.         </thead> 
  10.         <tbody> 
  11.             <% foreach (var product in ViewData.Model.Products) { %> 
  12.                 <tr> 
  13.                     <td><%= product.Name %></td> 
  14.                     <td><%= product.Category %></td> 
  15.                 </tr> 
  16.             <% } %> 
  17.         </tbody> 
  18.     </table> 
  19.         <div class="pager"> 
  20.         <%= Html.Pager(ViewData.Model.PagingInfo.CurrentPage, ViewData.Model.PagingInfo.ItemsPerPage, ViewData.Model.PagingInfo.TotalItems, "", ViewData["CategoryDisplayName"] as string)%> 
  21.     </div> 

我们再通过一个ajax调用来将这个控件显示在ViewCategory对应的View上,定义一个js函数:

  1. function getContentTab(categoryName, page) { 
  2.  
  3.     var url = '<%= Url.Content("~/MyPaging/ViewByCategory/") %>' + categoryName + "/"  + page; 
  4.     var targetDiv = "#tabs-" + categoryName; 
  5.     $.get(url, nullfunction (result) { 
  6.         $(targetDiv).html(result); 
  7.     }); 

我们看上面代码,我们去请求服务端的ViewByCategory方法,获取table中的数据。看ViewByCategory的代码:

  1. public ActionResult ViewByCategory(string categoryName, int? page) 
  2.     categoryName = categoryName ?? this.categories[0]; 
  3.     int currentPageIndex = page.HasValue ? page.Value : 0; 
  4.     ProductViewModel productViewModel = new ProductViewModel(); 
  5.      
  6.     IList<Product> productsByCategory = this.allProducts.Where(p => p.Category.Equals(categoryName)).ToList(); 
  7.     productViewModel.Products = productsByCategory.Skip((currentPageIndex - 1) * 10).Take(10).ToList(); 
  8.     productViewModel.PagingInfo.CurrentPage = currentPageIndex; 
  9.     productViewModel.PagingInfo.ItemsPerPage = 10; 
  10.     productViewModel.PagingInfo.TotalItems = productsByCategory.Count; 
  11.     return View("ViewByCategoryTable", productViewModel); 

为了简单起见数据来来自内存,使用list的take来实现分页。你可以很方便的改成从DB获取数据。在看下如何生成分页的html,其实很简单,我们只要在生成的分页的HTML中使用getContentTab函数就行了。

  1. public static string Pager(this HtmlHelper helper, int currentPage, int currentPageSize, int totalRecords,string urlPrefix,string status) 
  2.     StringBuilder sb1 = new StringBuilder(); 
  3.  
  4.     int seed = currentPage % currentPageSize == 0 ? currentPage : currentPage - (currentPage % currentPageSize); 
  5.  
  6.     if (currentPage > 0) 
  7.         sb1.AppendLine(String.Format("<a href='#' onclick=getContentTab(\"{0}\",\"{1}\") >Previous</a>", status, currentPage)); 
  8.  
  9.     if (currentPage - currentPageSize >= 0) 
  10.         sb1.AppendLine(String.Format("<a href='#' onclick=getContentTab(\"{0}\",\"{1}\") ></a>", status, (currentPage - currentPageSize) + 1)); 
  11.  
  12.     for (int i = seed; i < Math.Round((totalRecords / currentPageSize) + 0.5) && i < seed + currentPageSize; i++) 
  13.     { 
  14.         sb1.AppendLine(String.Format("<a href='#' onclick=getContentTab(\"{0}\",\"{1}\") >{1}</a>", status, i + 1)); 
  15.     } 
  16.  
  17.     if (currentPage + currentPageSize <= (Math.Round((totalRecords / currentPageSize) + 0.5) - 1)) 
  18.         sb1.AppendLine(String.Format("<a href='#' onclick=getContentTab(\"{0}\",\"{1}\") ></a>", status, (currentPage + currentPageSize) + 1)); 
  19.  
  20.     if (currentPage < (Math.Round((totalRecords / currentPageSize) + 0.5) - 1)) 
  21.         sb1.AppendLine(String.Format("<a href='#'  onclick=getContentTab(\"{0}\",\"{1}\") >Next</a>", status, currentPage + 2)); 
  22.  
  23.     return sb1.ToString(); 

 

效果:

效果图二:

jjjj

图三:

kkkk

总结:在asp.net mvc中实现了在tab页中的异步无刷新分页。这东西太常用了,放在这里,希望对你有所帮助。

设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师