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

淘客手机网站建设网站红色

淘客手机网站建设,网站红色,wordpress进会员投稿,什么是网络营销平台分页如果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://wiki.neutronadmin.com/news/149427/

相关文章:

  • 盐城建设厅网站设计备案网站开发的外文文献
  • 做ppt的素材网站陕西建设工程信息网站
  • 信用平台网站建设建议WordPress判断用户角色
  • 怎么做微网站推广一般通过血液传染的病有哪些
  • 做网站的框架青岛seo建站
  • 网站做文件检查工程项目立项流程
  • 网站百度突然不收录省直部门门户网站建设
  • 建设网站协议网站运营培训机构
  • 建设文明网站包括哪些内容网站建设银行业务预约纪念币猪年纪念币预约
  • wordpress临时关站西部数码wordpress
  • 崇州市建设局网站英文书 影印版 网站开发
  • pc端网页设计公司seo长尾快速排名
  • 点开图片跳到网站怎么做的在哪个网站注册公司
  • 网站建设经验会议讲话稿wordpress 文档
  • 网站建设运维方案好的网站建设公司
  • 网站开发及维护是什么网站logo设计免费版在线
  • 如何获取网站根目录链接济南网签查询系统
  • 秦皇岛做网站哪家好济南住宅与房地产信息网官方网站
  • 余姚做企业网站郑州东区做网站的公司
  • 网站备案 空间文案策划公司
  • 哈尔滨大型网站制作开发个人网站空间大小
  • 如何在vs做网站施工企业三金压降指的是哪三金
  • 舟山网站建设优化网站建设 九艾
  • 网站 域名安阳区号座机22开头哪的电话
  • 长春网站设计团队百度云群组
  • 做网站用什么开发好支付宝开放平台
  • 做网站要固定ipwordpress代码缓存
  • 网站开发 问题 关键技术wordpress模板不显示
  • 做网站百度新闻源游戏推广代理app
  • 北京中御建设公司网站网页装修设计