写在前面
上篇文章实现了图片列表,这篇文章实现文档列表将轻车熟路,因为逻辑基本相似,只是查询条件的不同。这里将txt,doc,docx,ppt,pptx,xls,xlsx的文件都归为文档列表中。
系列文章
[EF]vs15+ef6+mysql code first方式
[实战]MVC5+EF6+MySql企业网盘实战(2)——用户注册
[实战]MVC5+EF6+MySql企业网盘实战(3)——验证码
[实战]MVC5+EF6+MySql企业网盘实战(4)——上传头像
[实战]MVC5+EF6+MySql企业网盘实战(5)——登录界面,头像等比例压缩
[实战]MVC5+EF6+MySql企业网盘实战(5)——页面模板
[实战]MVC5+EF6+MySql企业网盘实战(5)——ajax方式注册
[实战]MVC5+EF6+MySql企业网盘实战(6)——ajax方式登录
[实战]MVC5+EF6+MySql企业网盘实战(7)——文件上传
[实战]MVC5+EF6+MySql企业网盘实战(8)——文件下载、删除
[实战]MVC5+EF6+MySql企业网盘实战(9)——编辑文件名
[实战]MVC5+EF6+MySql企业网盘实战(10)——新建文件夹
[实战]MVC5+EF6+MySql企业网盘实战(11)——新建文件夹2
[实战]MVC5+EF6+MySql企业网盘实战(12)——新建文件夹和上传文件
[实战]MVC5+EF6+MySql企业网盘实战(13)——编辑文件夹
[实战]MVC5+EF6+MySql企业网盘实战(14)——逻辑重构
[实战]MVC5+EF6+MySql企业网盘实战(14)——思考
[实战]MVC5+EF6+MySql企业网盘实战(15)——逻辑重构2
[实战]MVC5+EF6+MySql企业网盘实战(16)——逻辑重构3
[实战]MVC5+EF6+MySql企业网盘实战(17)——思考2
[实战]MVC5+EF6+MySql企业网盘实战(18)——文件上传,下载,修改
[实战]MVC5+EF6+MySql企业网盘实战(19)——BJUI和ztree
[实战]MVC5+EF6+MySql企业网盘实战(20)——Bootstrap Paginator
[实战]MVC5+EF6+MySql企业网盘实战(21)——网盘操作日志
[实战]MVC5+EF6+MySql企业网盘实战(22)——图片列表
[实战]MVC5+EF6+MySql企业网盘实战(23)——文档列表
实现
代码与图片列表基本相同,这里在考虑是否使用一个模板,不过想想,为了以后为每种类型的文件列表做扩展,还是单独放在一个controller中了。再仔细想想有没有更好的实现方式。这里就先这样来做了。
前端代码
@{ ViewBag.Title = "Lists"; Layout = "~/Views/Shared/_Layout.cshtml"; } <script> $(function () { var imgElement = $('#docmentpage'); var options = { size: "large", bootstrapMajorVersion: 3, //当前页 currentPage: 1, //可以改变显示的页码数 numberOfPages: 5, //总页数 totalPages: 5 }; function requestServer(pageIndex) { $.getJSON('/Document/GetDocuments?page=' + pageIndex, function (data) { console.log(data); data = JSON.parse(data); if (data.total <= pageIndex) { options.totalPages = pageIndex; } else { options.totalPages = data.total; }; $('#dvdocument').html(''); $('<table class="table table-bordered table-hover table-striped table-top" id="tbdocument"><tr><th>文件名</th> <th>文件大小</th><th>创建时间</th> </tr></table>').appendTo($('#dvdocument'));; for (var i = 0; i < data._data.length; i++) { var current = data._data[i]; $('<tr><td data-id=' + current.Id + '><img src="' + current.FileIcon + '">' + current.Name + '</td><td>' + current.Size + '</td><td>' + ChangeDateFormat(current.Dt) + '</td></tr>').appendTo($('#tbdocument')); }; imgElement.bootstrapPaginator(options); }); }; function loadData(pageIndex) { options.onPageClicked = function (e, originalEvent, type, page) { //页码单击事件 console.log(page); options.currentPage = page; requestServer(page); }; requestServer(pageIndex); imgElement.bootstrapPaginator(options); }; loadData(1); }); </script> <div class="tableContent" style="95%;" id="dvdocument"> </div> <div style="95%;position:relative;margin-top:10px"> <ul id='docmentpage' class="bjui-pageFooter" style="margin:0 auto; margin-left:30%;"></ul> </div>
服务端代码
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Script.Serialization; using Wolfy.NetDisk.BLL; using Wolfy.NetDisk.IBLL; using Wolfy.NetDisk.Model; using Wolfy.NetDisk.Site.Models; namespace Wolfy.NetDisk.Site.Controllers { public class DocumentController : Controller { private IMyFileServiceRepository _myFileServiceRepository = new MyFileServiceRepository(); private ILogServiceRepository _logServiceRepository = new LogServiceRepository(); private IFileTypeServiceRepository fileTypeServiceRepository = new FileTypeServiceRepository(); // // GET: /Images/ public ActionResult Lists() { UserInfo user = Session["user"] as UserInfo; if (user == null) { return RedirectToAction("Login", "UserInfo"); } return View(); } [HttpGet] public JsonResult GetDocuments() { UserInfo userInfo = Session["user"] as UserInfo; int page = Convert.ToInt32(Request.Params["page"]); if (page <= 0) { page = 1; } if (userInfo == null) { RedirectToAction("Login", "UserInfo"); } int pageSize = 10; int recordCount = 0; var documentPaged = _myFileServiceRepository.FindPaged<DateTime>(page, pageSize, out recordCount, x => x.User.Id == userInfo.Id && x.IsDelete == false && (x.FileIcon.Contains("DocType.png") || x.FileIcon.Contains("XlsType.png") || x.FileIcon.Contains("PptType.png") || x.FileIcon.Contains("PdfType.png") || x.FileIcon.Contains("TxtType.png")), false, x => x.CreateDt); int totalPage = Convert.ToInt32(Math.Ceiling(recordCount * 1.0 / pageSize)); List<MyFileViewModel> lstMyFileViewModel = new List<MyFileViewModel>(); foreach (var item in documentPaged) { lstMyFileViewModel.Add(new MyFileViewModel() { Id = item.Id, FileIcon = item.FileIcon, FileServerUrl = "/NetDisk/" + item.FileMd5 + item.FileExt, Name = item.Name, FileThumnailUrl = string.Empty, Size = item.FileSize, Dt = item.CreateDt }); } return new JsonResult() { Data = new JavaScriptSerializer().Serialize(new { _data = lstMyFileViewModel, _code = 200, total = totalPage }), JsonRequestBehavior = JsonRequestBehavior.AllowGet }; } } }
测试
总结
实现起来还是比较简单的,马上就2016年了,祝大家元旦快乐。