no_2 .net mvc4之带搜索条件的无刷分页

上传人:第*** 文档编号:31311281 上传时间:2018-02-06 格式:DOC 页数:10 大小:248.50KB
返回 下载 相关 举报
no_2 .net mvc4之带搜索条件的无刷分页_第1页
第1页 / 共10页
no_2 .net mvc4之带搜索条件的无刷分页_第2页
第2页 / 共10页
no_2 .net mvc4之带搜索条件的无刷分页_第3页
第3页 / 共10页
no_2 .net mvc4之带搜索条件的无刷分页_第4页
第4页 / 共10页
no_2 .net mvc4之带搜索条件的无刷分页_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《no_2 .net mvc4之带搜索条件的无刷分页》由会员分享,可在线阅读,更多相关《no_2 .net mvc4之带搜索条件的无刷分页(10页珍藏版)》请在金锄头文库上搜索。

1、看完初步,相信对 MVC 的结构和开发模式有一个初步的了解现在我们对刚才的流程进行一些改造。 。先拿店铺做例子,一次性取出过多的数据,对访问速度和效率相当不友好,所以我们要进行分页操作。同样的,我们先在 Model 中定义一个分页的店铺实体,依然存放到大实体中public PagedList list get; set; /定义分页的店铺列表再把 ListStore 这个自定义的实体实现(使用自定义的实体好处在于只查询或更改部分字段,在数据处理效率上有明显提高,如果数据量大了,一个 select * 和一个 select ID 的效率是天差地别的)/声明店铺列表的部分参数实体。public c

2、lass ListStoreKeyType(KeyTypes.Identity, u_store)public int ID get; set; /店铺IDpublic int userID get; set; /店铺所属者的用户IDpublic String storeName get; set; /店铺名public String ownerName get; set; /店主名public String regionName get; set; /地区名public String storeLogo get; set; /店铺Logopublic DateTime? add_time g

3、et; 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 IsR

4、eCount, 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.当前第几页

5、/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 = parame

6、ters8.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;

7、/定义每页显示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.Rou

8、teKey.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,用来装小mod

9、elmod.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 Route

10、ValueDictionary 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(我是卖家。爱干啥干啥 )*然后创建一个局部视图 _F

11、enyeViewBag.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 PagerOptionsShowPageIndexBox = false,PageIndexBoxType = PageIndexBoxType.TextBox,ShowGoButton

12、 = 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 ,

13、1););我们用 ajax.beginForm 创建了一个异步的表单请求,局部刷新的 div 的 id 是 articles所以我们把刷新的局部视图放进了这个 div 里面,视图名为 _Fenye.使用的Html.Partial 关键字将上面定义的 IwannaTo 这个 Model 传递进了局部视图内在局部视图内再次声明定义这个 Model,就可以直接取值了。Ajax.Pager(Model.list, Index, UserContent代表着分页请求的地址为 UserContent 控制器中的 Index 方法。然后我们回到 UserContent 控制器内加上一句话if (Reques

14、t.IsAjaxRequest()return PartialView(_Fenye, mod);/分页视图因为是 ajax 请求的分页,所以第一次进入页面的请求是没有 ajax 的。可以加载很多数据然后分页请求的话只需要提取分页中的内容,其他内容不变,因此可以直接将结果返回到分页视图,不用加载其他信息(如产品列表)到这一步,基本上无刷的分页就做好了。但是,还有一个参数没用到,那就是 storeName。我们定义了一个用于筛选的参数,可以搜索+分页无刷新在 Index 视图中对 ajax.beginfrom 进行改造:using (Ajax.BeginForm(Index, new Route

15、ValueDictionary 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在本页面接收*mo

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 工程造价

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号