No_2 .net MVC4之带搜索条件的无刷分页.doc_第1页
No_2 .net MVC4之带搜索条件的无刷分页.doc_第2页
No_2 .net MVC4之带搜索条件的无刷分页.doc_第3页
No_2 .net MVC4之带搜索条件的无刷分页.doc_第4页
No_2 .net MVC4之带搜索条件的无刷分页.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

看完初步,相信对MVC的结构和开发模式有一个初步的了解现在我们对刚才的流程进行一些改造。先拿店铺做例子,一次性取出过多的数据,对访问速度和效率相当不友好,所以我们要进行分页操作。同样的,我们先在Model中定义一个分页的店铺实体,依然存放到大实体中public PagedList list get; set; /定义分页的店铺列表再把ListStore这个自定义的实体实现(使用自定义的实体好处在于只查询或更改部分字段,在数据处理效率上有明显提高,如果数据量大了,一个select * 和一个 select ID的效率是天差地别的)/声明店铺列表的部分参数实体。 public class ListStore KeyType(KeyTypes.Identity, u_store) public int ID get; set; /店铺ID public int userID get; set; /店铺所属者的用户ID public String storeName get; set; /店铺名 public String ownerName get; set; /店主名 public String regionName get; set; /地区名 public String storeLogo get; set; /店铺Logo public DateTime? add_time get; set; /开店时间 public string zhuying get; set; /主营产品 public int? goodsNum get; set; /店铺产品总数 public byte? praiseRate get; set; /店铺好评率然后在接口中定义分页方法List list(int PageSize, int PageIndex, bool IsReCount, ref int num,string storeName = );在服务层实现分页:/店铺列表的分页 public List list(int PageSize, int PageIndex, bool IsReCount, ref int num, string storeName = ) StringBuilder sql = new StringBuilder(); sql.Append(state=1);/默认状态为1的便是店铺开启状态 if (storeName != ) /定义一个分页的筛选条件,比如搜索店铺名 sql.Append(string.Format( and storeName like 0%, storeName); /调用存储过程 /参数有8个 /1.表名 /2.表主键 /3.查询哪些字段(需要和model中定义的字段一样,不可多不可少) /4.where条件 /5.页大小 /6.当前第几页 /7.是否返回总条数默认为 true /8.排序 SqlParameter parameters = S_PageRecord(u_store, ID, ID,userID,storeName,ownerName,regionName,storeLogo,add_time,zhuying,goodsNum,praiseRate, sql.ToString(), PageSize, PageIndex, IsReCount, ID ASC); DataSet ds = base.RunProcedure(S_PageRecord, parameters, ds); object _id = parameters8.Value; if (_id != DBNull.Value) num = int.Parse(_id.ToString();/总条数 List listStore = base.ConvertToList(ds.Tables0); return listStore; 到了这一步。我们就可以回到控制器,对Index方法做一些修改public ActionResult Index(int pageIndex = 1, int id2 = 1, string id3 = , string storeName = ) int num = 0; /初始化总条数 int PageSize = 10; /定义每页显示10条 /调用分页方法,传入分页所需的4个参数和1个条件(或者更多) PagedList list = serviceProc.list(PageSize, pageIndex, true, ref num, storeName).AsQueryable().ToPagedList(pageIndex, PageSize); /处理分页展示参数 var model = new PagedList(list, pageIndex, PageSize, list.Count); /将参数返回 model.RouteKey.Add(pageIndex, pageIndex); model.RouteKey.Add(id, id2); model.RouteKey.Add(name, name);model.RouteKey.Add(storeName, storeName); /接受店铺总数量赋值,可是在实现分页的时候并没有返回num。为什么这里可以接收num的值呢? /num的定义是 ref int num /使用了 ref关键字来定义,这里的ref用法和指针类似,需要初始化一个值,然后服务层实现的时候改变了这个值,在这里就可以直接获取到 model.TotalItemCount = num; IwannaTo mod = new IwannaTo();/定义一个大Model,用来装小model mod.list = model;/将分页小model放入大mod中好了,此时就可以在视图中使用分页了。但是分页如果刷新请求,对用户体验不友好,所以我们要做局部刷新,传说中的(无刷)现在去View中,对Index.cshtml做一些改造 ViewBag.Title = Index;*把Index中声明的大Model在本页面接收*model Sys.Models.IwannaTo* 无刷分页需要包含这些js *Index Html.Raw(这货的ID是: + Model.UserID + . =。= )using (Ajax.BeginForm(Index, new RouteValueDictionary id, , new AjaxOptions UpdateTargetId = articles, InsertionMode = InsertionMode.Replace , new class = ) Html.Partial(_Fenye, Model)* 上一节中的内容暂时注释掉 foreach (var item in Model.Goods) Html.Raw(我是产品。爱干啥干啥 ) * 上一节中的内容暂时注释掉 foreach (var subItem in Model.StoreList) Html.Raw(我是卖家。爱干啥干啥 ) *然后创建一个局部视图 _Fenye ViewBag.Title = _Fenye;using MvcPagerusing Sys.Utilitymodel Sys.Models.IwannaToforeach (var item in Model.list) Html.Raw(店铺名:+item.storeName+。店铺ID是:+item.ID+) Ajax.Pager(Model.list, Index, UserContent, new PagerOptions ShowPageIndexBox = false, PageIndexBoxType = PageIndexBoxType.TextBox, ShowGoButton = false, RouteKey = new RouteValueDictionary(Model.list.RouteKey) * id, 1 , id2, 2 * , new AjaxOptions LoadingElementId = J_link2, HttpMethod = Get, UpdateTargetId = articles, OnBegin = null , new class = badoopager, tt = f ) $(function () $(#J_link2 input).hide(); $(body,html).animate( scrollTop: 0 , 1); );我们用ajax.beginForm创建了一个异步的表单请求,局部刷新的div的id是articles所以我们把刷新的局部视图放进了这个div里面,视图名为 _Fenye.使用的Html.Partial 关键字将上面定义的 IwannaTo这个Model传递进了局部视图内在局部视图内再次声明定义这个Model,就可以直接取值了。Ajax.Pager(Model.list, Index, UserContent代表着分页请求的地址为 UserContent控制器中的Index方法。然后我们回到UserContent控制器内加上一句话if (Request.IsAjaxRequest() return PartialView(_Fenye, mod);/分页视图因为是ajax请求的分页,所以第一次进入页面的请求是没有ajax的。可以加载很多数据然后分页请求的话只需要提取分页中的内容,其他内容不变,因此可以直接将结果返回到分页视图,不用加载其他信息(如产品列表)到这一步,基本上无刷的分页就做好了。但是,还有一个参数没用到,那就是storeName。我们定义了一个用于筛选的参数,可以搜索+分页无刷新在Index视图中对ajax.beginfrom进行改造:using (Ajax.BeginForm(Index, new RouteValueDictionary id, , new AjaxOptions UpdateTargetId = articles, InsertionMode = InsertionMode.Replace , new class = ) 店铺名:然后在下面写上一段赋值和提交的js: function GetNow() var Name = $(#searchName).val(); $(#storeName).val(Name); $(#submit2).submit(); /看上面form表单的提交按钮的ID 用到的是ajax隐藏域提交,所以需要将搜索值赋给隐藏域,然后提交请求。刷新分页内容完整代码: ViewBag.Title = Index;*把Index中声明的大Model在本页面接收*model Sys.Models.IwannaTo* 无刷分页需要包含这些js *Index Html.Raw(这货的ID是: + Model.UserID + . =。= )using (Ajax.BeginForm(Index, new RouteValueDictionary id, , new AjaxOptions UpdateTargetId = articles, InsertionMode = InsertionMode.Replace , new class = ) 店铺名: Html.Partial(_Fenye, Model) function GetNow() var

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论