当前位置: 首页 > news >正文

绍兴市网站建设_网站建设公司_AJAX_seo优化

做网站对商家的好处,免费dns二级域名,apache多网站配置,怎么制作古装视频分页如果dinners列表记录过多#xff0c;为了让用户更方便浏览#xff0c;我们需要实现分页显示#xff0c;而不是一次显示大量的记录列表。Index() Action方法更新DinnersController类的Index() action方法代码如下#xff1a;//// GET: /Dinners/public ActionResult Ind…分页 如果dinners列表记录过多为了让用户更方便浏览我们需要实现分页显示而不是一次显示大量的记录列表。 Index() Action方法更新 DinnersController类的Index() action方法代码如下         //         // GET: /Dinners/         public ActionResult Index()         {             var dinners dinnerRepository.FindUpcomingDinners().ToList();             return View(Index, dinners);         } 当用户请求/Dinners地址时将返回所有即将来临的dinners列表并在页面全部显示出来。 理解IQueryableT IQueryableT 接口是.NET 3.5的LINQ中引入的实现了强大的deferred execution我们将利用这一特性实现分页功能。 在DinnerRepository类中FindUpcommingDinners() 方法将返回IQueryableDinner对象。         public IQueryableDinner FindUpcomingDinners()         {             return from dinner in db.Dinners                    where dinner.EventDate DateTime.Now                    orderby dinner.EventDate                    select dinner;         } FindUpcomingDinners() 方法返回的IQueryableDinner 对象封装了使用LINQ to SQL从数据库中检索Dinner对象的查询。重要的是该语句并不会对数据库执行查询直到我们试图去访问或者遍历查询中的数据或者我们调用ToList() 方法。调用FindUpcomingDinners() 方法在执行查询之前可以选择添加额外的操作或过滤chained operations/filters当查询数据时LINQ to SQL会聪明地对数据库执行组合查询。 为了执行分页逻辑我们更新了Index() action 方法在调用ToList() 方法之前对返回的IQueryableDinner序列应用了附加的Skip 和Take操作符。 // // GET: /Dinners/ public ActionResult Index() { var upcomingDinners dinnerRepository.FindUpcomingDinners(); var paginatedDinners upcomingDinners.Skip(10).Take(10).ToList(); return View(paginatedDinners); } 上述代码跳过数据库中前10条即将来临的Dinners记录接着返回10条记录。LINQ to SQL聪明地构造了优化的SQL查询在SQL 数据库端实现上述逻辑仅仅返回我们想要的10条记录使查询性能更加优化和可扩展性。 在URL中添加page参数值 我们将在URL中包含page参数值标识用户请求的分页而不是在代码中硬编码特定的页面范围。 使用Querystring 参数值 下面的代码演示如何使用更新Index() action 方法支持querystring 参数URL地址如/Dinners?page2。 // GET: /Dinners/ // /Dinners?page2 public ActionResult Index(int? page) { const int pageSize 10; var upcomingDinners dinnerRepository.FindUpcomingDinners(); var paginatedDinners upcomingDinners.Skip((page ?? 0) * pageSize) .Take(pageSize) .ToList(); return View(paginatedDinners); } 上述Index() 方法有一个参数page该参数定义为nullable 整型。/Dinners?page2 地址表示2将传递为参数值。/Dinners 地址没有querystring 参数将传入一个空值。 我们通过page乘以页面记录数page size本范例为10来决定需要跳过的dinners记录条数。同时我们使用了C#操作符??该操作在处理nullable类型时非常有用。如果page参数为空null上述代码将对page赋值为0。 使用嵌入的URL参数值 除了了querystring外另外的一个办法是嵌入page参数到实际的URL中如/Dinners/Page/2 或者/Dinners/2。ASP.NET MVC包含了一个强大的URL路由引擎可以轻松支持上述场景。 我们可以注册定制的路由规则映射任何进来的URL或URL格式到任何Controller控制器类和Action方法。可以通过打开项目中Global.asax文件来实现。 使用MapRoute() 辅助方法注册一个新的映射规则像第一次调用routes.MapRoute()方法         public static void RegisterRoutes(RouteCollection routes)         {             routes.IgnoreRoute({resource}.axd/{*pathInfo});             routes.MapRoute(                 UpcomingDinners,                 Dinners/Page/{page},                 new { controller Dinners, action Index }             );             routes.MapRoute(                 Default,                                              // Route name                 {controller}/{action}/{id},                           // URL with parameters                 new { controller Home, action Index, id } // Parameter defaults             );         } 在上述代码中我们注册了一个新的路由规则 – UpcommingDinnersURL格式为/Dinners/Page/{page}其中{page} 是嵌入在URL的参数。MapRoute() 方法将符合上述URL格式的请求映射到DinnersController类的Index() action 方法。 我们使用与Querystring方案中完全相同的Index() 方法处理page参数将来自于URL而不是querystring         //         // GET: /Dinners/         // /Dinners/Page/2         public ActionResult Index(int? page)         {             const int pageSize 10;             var upcomingDinners dinnerRepository.FindUpcomingDinners();             var paginatedDinners upcomingDinners.Skip((page ?? 0) * pageSize)             .Take(pageSize)             .ToList();             return View(paginatedDinners);         } 现在访问/Dinners URL时将返回前10条记录而不是全部记录了。  接下来访问/Dinners/Page/1 URL时将看到下一页的Dinners记录。  添加页面导航界面 实现页面分页的最后一步是在视图模板中添加上一页、下一页的导航界面方便用户在页面之间切换。 为了正确实现这一步我们需要知道数据库中Dinners的记录数和需要分为多少页。接着我们计算当前请求的页面是开始页或是最后页并正确显示或隐藏上一页和下一页的导航链接。我们将在Index() action 方法中实现这一逻辑。另一选择是我们在项目中添加一个辅助类封装这一逻辑实现更多地方的重用。 下面是一个简单PaginatedList 辅助类继承.NET Framework 内置的ListT集合类。它实现了一个可重用的集合类用来在任何IQueryable序列中实现分页。在NerdDinner范例程序中用来对IQueryableDinner 结果集进行分页但是它也可用于其他应用程序中对IQueryableProduct或IQueryableCustomer结果集进行分页。     public class PaginatedListT : ListT     {         public int PageIndex { get; private set; }         public int PageSize { get; private set; }         public int TotalCount { get; private set; }         public int TotalPages { get; private set; }         public PaginatedList(IQueryableT source, int pageIndex, int pageSize)         {             PageIndex pageIndex;             PageSize pageSize;             TotalCount source.Count();             TotalPages (int)Math.Ceiling(TotalCount / (double)PageSize);             this.AddRange(source.Skip(PageIndex * PageSize).Take(PageSize));         }         public bool HasPreviousPage         {             get             {                 return (PageIndex 0);             }         }         public bool HasNextPage         {             get             {                 return (PageIndex 1 TotalPages);             }         }     } 上述类公开的4个属性PageIndex、PageSize、TotalCount 和 TotalPages等等另外公开了2个辅助属性HasPreviousPage和HasNextPage这2个属性分别表示是否页面数据在集合的开始页或者结束页。上述代码将引起执行2次SQL 查询第一次检索Dinner Objects总记录数不返回对象仅仅是执行SELECT COUNT语句返回一个整型值第二次检索数据库返回当前页需要的数据列表。 接着我们更新DinnersController.Index() 辅助方法从DinnerRepository.FindUpcomingDinners() 结果集中创建一个PaginatedListDinner 对象并传递给视图模板。         // GET: /Dinners/         // /Dinners/Page/2         public ActionResult Index(int? page)         {             const int pageSize 10;             var upcomingDinners dinnerRepository.FindUpcomingDinners();             var paginatedDinners new PaginatedListDinner(upcomingDinners, page ?? 0, pageSize);             return View(paginatedDinners);         } 接着更新\Views\Dinners\Index.aspx 视图模板从继承ViewPageIEnumerableDinner更新为ViewPageNerdDinner.Helpers.PaginatedListDinner然后添加如下代码到视图模板的底部显示或隐藏上一页和下一页的导航链接     % if (Model.HasPreviousPage)        { %     % Html.RouteLink(上一页,UpcomingDinners,new { page(Model.PageIndex-1) }) %     % } %     % if (Model.HasNextPage)        { %     % Html.RouteLink(下一页,UpcomingDinners,new { page (Model.PageIndex 1) })%     % } % 上述代码使用Html.RouteLink() 辅助方法生成HTML超链接这一方法与我们前面使用的Html.ActionLink() 辅助方法比较相似。区别是生成URL地址时使用Global.asax文件中设置的路由规则。确保生成的URL和Index() Action方法有相同的格式/Dinners/Page/{page} – 其中{page} 参数值基于当前页的序号来提供。  现在我们访问NerdDinner应用程序时每次将展示10条Dinners记录。  在页脚也提供了上一页和下一页的导航链接实现页面跳转。 来自西北的狼
http://www.lebaoying.cn/news/29259.html

相关文章:

  • 动漫网站源码下载网站域名备案后公示
  • 网站建设公司六安百度搜索引擎入口登录
  • 网站建设php实验报告网站网站到底怎么做
  • 杭州富阳建设局网站首页微指数查询入口
  • PHP网站开发工程师招聘双语网站模板下载
  • wordpress 不同ip南宁网站优化公司电话
  • 山东网站域名备案时间中国建设劳动学会官方网站是多少
  • 品牌网站建设渠道企业展厅数字多媒体
  • 中国工商银行官方网站登录wordpress cdn 不刷新
  • 最专业微网站建设公司接外包项目的网站
  • 手机网站源码最好wordpress提请审批
  • 苏州网站建设报价单网站建设维保免费内容
  • 网站开发专员郑州网站建设搜q.479185700
  • 网站后台模板 jquery广告营销手段有哪些方式
  • 网站制作小常识中国住房和城乡建设网
  • 拖拽建站系统源码漳州网站建设优化排名
  • 自助建站网站程序源码企业公示信息
  • 网站建设三网合一指的是什么wordpress外部链接
  • 甘肃省住房与城乡建设厅网站首页吉林省吉林市邮政编码
  • 工程房地产行业一条龙网站提供深圳网站制作公司
  • 做磁力链网站企业营销策略有哪几种
  • 接任务做兼职的的网站百度贴吧网页版登录入口
  • 四川建设厅网站郑州网站建设代运营
  • 潍坊网站建设培训班湖南企业竞价优化公司
  • 百度快照抓取的是网站哪里的内容在线做带字头像的网站
  • 网站显示域名专线可以做网站
  • 宁波市节约型机关建设考试网站网站建设实录
  • 郑州网站建设老牌公司辽宁工程建设信息网诚信库怎么填
  • 信息发布网站开发模板现在有没有免费的网站
  • 网站开发公司 商业计划书如何制作app软件编程