第一次写博客,文采不好请多见谅,这里主要是写一下,自己是如何处理分页问题,我想初学者也遇到过这个问题。

分页的情况下,编辑信息有返回和编辑2个按钮,操作后都是应该返回原分页界面,使用TempData把分页的参数传递过去,但是只传递一个,另外一个不传递参数,导致点击返回能返回正常的分页,而点击编辑的情况下,直接返回到首页。

解决方式:大概的介绍下TempData的使用。TempData保存在Session中,Controller每次请求的时候都会从Session中获取 TempData,然后清除Session。基于这样的事实,在每次请求结束后,TempData的生命周期也就结束了。使用form传递另外一个参数,大概的解决方式说了

好了下面上代码让大家看下

首先我们要在”资料列表“界面中获取数据,首先是获取pageSize当前页的数据条数,page所在的第几页,recountCount数据的总条数

 public ActionResult FileInfoList(int page = )
{
string errorMsg = TempData["errorMsg"] as string;
if (!string.IsNullOrEmpty(errorMsg))
{
ModelState.AddModelError("ErrorMsg", errorMsg);
}
int pageSize = ;
int pageIndex = page;
int recountCount = ;
ViewBag.PageSize = pageSize;
ViewBag.PageIndex = pageIndex; List<UploadFileModel> list = new List<UploadFileModel>();
IUploadFileService file = LoadService<IUploadFileService>();
Criteria c = new Criteria();
try
{ c.AddOrderBy(UploadFileModel._FileId, OrderByDirection.Desc); list = file.GetPagedUploadFileModel(c, pageIndex, pageSize, out recountCount);
}
catch (System.Exception e)
{
ModelState.AddModelError("ErrorMsg", "列表加载失败");
}
this.TempData["pageSize"] = pageSize;
this.TempData["page"] = page;
this.TempData["recountCount"] = recountCount;
return View(list);
}

用this.TempData[]的形式,把数据传递到需要调用数据的(编辑资料信息)界面 传递给ViewData["page"] = this.TempData["page"];的方式

  /// <summary>
/// 编辑资料信息界面
/// </summary>
/// <param name="fileId"></param>
/// <returns></returns>
public ActionResult EditFileInfo(int fileId)
{
ViewData["page"] = this.TempData["page"];
if (fileId == )
{
return RedirectToAction("FileInfoList");
}
IUploadFileService upload = LoadService<IUploadFileService>();
UploadFileModel model = new UploadFileModel();
try
{
model = upload.GetUploadFileModelById(fileId);
}
catch (Exception e)
{
ModelState.AddModelError("ErrorMsg", "信息显示失败");
} return View(model);
}

前端通过 @Html.Hidden("Page", ViewData["page"])表单传递的方式隐藏的把page参数在传递到编辑方法代码中,如下面所示

  /// <summary>
/// 编辑资料的方法
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
[HttpPost]
[ValidateAntiForgeryToken]
[ValidateInput(false)]
public ActionResult EditFileInfo(UploadFileModel model)
{
string message = "";
model.FileLastTime = DateTime.Now;
//通过表单的形式获取传递的page
int page = Convert.ToInt32(Request.Form["Page"]);
if (ModelState.IsValid)
{
IUploadFileService upload = LoadService<IUploadFileService>();
try
{
upload.Update(model);
message = "编辑成功";
TempData["message"] = message;
if (page > )
{ return RedirectToAction("FileInfoList", "FileManage", new { page });
}
return RedirectToAction("FileInfoList", "FileManage");
}
catch (Exception e)
{
ModelState.AddModelError("ErrorMsg", "编辑失败");
}
}
return View(model);
}

使用int page = Convert.ToInt32(Request.Form["Page"]);的方式把前台表单传递的page获取,用return RedirectToAction("FileInfoList", "FileManage", new { page });的方式返回分页。返回按钮直接通过界面中 ViewData["page"] = this.TempData["page"];的方法获取page的值。代码如下

 <input type="button" name="btnBack" style="border-style:none" class="grayBtn" value="返 回" onclick="window.location.href='@Url.Action("FileInfoList", new { page = ViewData["page"] })'" />

这样的方式解决了ViewData和TempData传值的问题。
在写下关于删除的,要考虑的情况是,当你所处分页中只有最后一条数据的情况下,点击删除我们需要返回的不是本页而是上一页,如果是最后一页,则不做变动。如下我们看下代码

/// <summary>
/// 删除单个资料
/// </summary>
/// <param name="fileId"></param>
/// <returns></returns>
public ActionResult DeleFileInfo(int fileId)
{
UploadFileModel model = new UploadFileModel();
IUploadFileService file = LoadService<IUploadFileService>(); int page = (int)this.TempData["page"];
int recountCount = (int)this.TempData["recountCount"];
int pageSize = (int)this.TempData["pageSize"]; try
{
model = GetUploadFileModelByFileId(fileId);
file.Delete(model);
}
catch (Exception e)
{
ModelState.AddModelError("ErrorMsg", "删除失败");
}
//判断要删除的分页内数据情况,如果是分页内最后一条数据则删除后转跳到page-1的页面,否则转跳到page的界面
if (page > )
{
//使用向上取整防止出现BUG
if (Math.Ceiling(Convert.ToDouble(recountCount % (page * pageSize))) == )
{
page = page - ;
return RedirectToAction("FileInfoList", "FileManage", new { page });
}
return RedirectToAction("FileInfoList", "FileManage", new { page });
}
return RedirectToAction("FileInfoList", "FileManage");
}

这里的3个局部变量也是从“资料列表”界面获取,这里的pageSize 是每页的最大数据条数。我们这里先判断是否是最后一页if (page > 0),如果是在进入判断用 recountCount 总数据条数/(page第几页*pageSize每页的最大数据条数)的余数,然后使用Math.Ceiling进行向上取整,防止pageSize 是每页的最大数据条数不是10的情况下出现的小数,来判断是否是最后一条数据,如果是所在页面-1,返回上一页,不是则返回本页

学习MVC框架,处理分页和删除分页转跳的问题的更多相关文章

  1. 学习MVC框架之一

    一.MVC的概述 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑和数据显示分离的 ...

  2. 学习MVC框架的步骤

    1.搭建环境 2.了解控制层和视图层的映射 3.控制层和视图层的传值 交互 4.异常处理 5.页面标签 6.文件上传 7.框架源代码

  3. ASP.NET 平台下的MVC框架

    这段时间在学习MVC框架,希望自己的一点心得能够帮助正在学习的同仁. 在阅读一些大牛的博客的时候看到一句话,感觉特别好,“你应该尝试MVC,是因为最终你会学到一些东西,它可以使你成为更好的Web开发人 ...

  4. 自定义MVC框架之工具类-分页类的封装

    以前写过一个MVC框架,封装的有点low,经过一段时间的沉淀,打算重新改造下,之前这篇文章封装过一个验证码类. 这次重新改造MVC有几个很大的收获 >全部代码都是用Ubuntu+Vim编写,以前 ...

  5. Spring MVC和Spring Data JPA之按条件查询和分页(kkpaper分页组件)

    推荐视频:尚硅谷Spring Data JPA视频教程,一学就会,百度一下就有, 后台代码:在DAO层继承Spring Data JPA的PagingAndSortingRepository接口实现的 ...

  6. SSM框架——实现分页和搜索分页

    登录|注册     在路上 在路上,要懂得积累:在路上,要学会放下:我在路上!Stay hungry,Stay foolish.       目录视图 摘要视图 订阅 [公告]博客系统优化升级     ...

  7. 动态多条件查询分页以及排序(一)--MVC与Entity Framework版url分页版

    一.前言 多条件查询分页以及排序  每个系统里都会有这个的代码 做好这块 可以大大提高开发效率  所以博主分享下自己的6个版本的 多条件查询分页以及排序 二.目前状况 不论是ado.net 还是EF ...

  8. MVC3+EF4.1学习系列(三)-----排序 刷选 以及分页

    上篇文章 已经做出了基本的增删改查    但这远远不足以应付实际的项目  今天讲下实际项目中 肯定会有的 排序 刷选  以及分页. 重点想多写点分页的 毕竟这个是任何时候都要有的 而且 我会尽量把这个 ...

  9. MVC系列——MVC源码学习:打造自己的MVC框架(四:了解神奇的视图引擎)

    前言:通过之前的三篇介绍,我们基本上完成了从请求发出到路由匹配.再到控制器的激活,再到Action的执行这些个过程.今天还是趁热打铁,将我们的View也来完善下,也让整个系列相对完整,博主不希望烂尾. ...

随机推荐

  1. python爬虫——selenium+chrome使用代理

    先看下本文中的知识点: python selenium库安装 chrome webdirver的下载安装 selenium+chrome使用代理 进阶学习 搭建开发环境: selenium库 chro ...

  2. pyton 封装

    定义:在类中将方法和属性隐藏起来 一.私有化 1.格式 __名字,在名字前加双下划线 2.私有化对象 对象属性 静态属性 普通方法 3.作用 1)在类的外面不能直接调用类的方法和属性 2)类的属性值不 ...

  3. 支撑京东小程序的开发框架 「Taro」

    Taro 简介 现在支持小程序的平台太多了,例如: 微信小程序 QQ小程序 支付宝小程序 百度小程序 字节跳动小程序 针对他们都各自开发一套的话开发成本就太高了. 如果写一套代码,就能开发出适配这么多 ...

  4. 深入学习MySQL 01 一条查询语句的执行过程

    在学习SpringCloud的同时,也在深入学习MySq中,听着<mysql45讲>,看着<高性能MySQL>,本系列文章是本人学习过程的总结,水平有限,仅供参考,若有不对之处 ...

  5. orcle 创建用户的几个步骤

    创建用户一般分四步: 第一步:创建临时表空间 第二步:创建数据表空间 第三步:创建用户并制定表空间 第四步:给用户授予权限1.创建临时表空间 create temporary tablespace t ...

  6. Docker 安装 Elasticsearch+kibana

    1 下载镜像 docker pull elasticsearch:7.4.1 docker pull kibana:7.4.1 拉取的镜像如下: 2 创建network 创建一个网络,名字任意取,使得 ...

  7. 用路由系统生成输出URL 在视图中生成输出URL 高级路由特性 精通ASP-NET-MVC-5-弗瑞曼

    Using the Routing System to Generate an Outgoing URL 结果呢:<a href="/Home/CustomVariable" ...

  8. html恶搞之无限弹窗

    啦啦啦啦啦 恶搞别人吗? 把下面代码做成html文件发给别人,用浏览器打开就可以看见效果了 <!DOCTYPE html> <html><head><meta ...

  9. Spring Boot定义系统启动任务的两种方式

    Spring Boot定义系统启动任务的两种方式 概述 如果涉及到系统任务,例如在项目启动阶段要做一些数据初始化操作,这些操作有一个共同的特点,只在项目启动时进行,以后都不再执行,这里,容易想到web ...

  10. springBoot的事件机制---GenericApplicationListener用法

    springBoot的事件机制---GenericApplicationListener用法 什么是ApplicationContext? 它是Spring的核心,Context我们通常解释为上下文环 ...