分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

【MVC】快速构建一个图片浏览网站

发布时间:2023-09-06 01:56责任编辑:白小东关键词:MVC

  当抄完MusicStore时,你应该对MVC有一个比较清晰的认识了.接下来就需要做个网站来继续增加自己的知识了.那么,该做个什么网站呢.做个图片浏览网站吧,简单而实用.

简单设计

    1.首先,页面中间是个图片列表.将所有图片列出来是不太科学的,所以要做个分页浏览的功能.

    2.页面右边,有个图片排行榜,列出点击量前10名的图片名称.而且,同一时间段同一客户端的重复点击只能计算一次才合理的.

    3.有图片浏览就肯定有图片上传功能啦,还必须要是登录后才能上传.

数据层

    采用EF的Code First方式构建数据库,先定义一个ImageModle,放到DbContext数据上下文中,再定义一个DropCreateDatabaseIfModelChanges迁移类,在seed方法中初始化数据,如下

 ???public class ImageModle ???{ ???????[Display(Name="编号")] ???????public int Id { get; set; } ???????[Display(Name="图片名")] ???????public string ImageName { get; set; } ???????[Display(Name = "图片相对路径")] ???????public string ImageUrl { get; set; } ???????[Display(Name = "上传者")] ???????public string Uploader { get; set; } ???????[Display(Name = "点击数")] ???????public int HitCount { get; set; } ???????[Display(Name = "上传时间")] ???????public DateTime UploadDateTime { get; set; } ????????} ???public class ImageMangeEntities:DbContext ???{ ???????public ImageMangeEntities() ???????????: base("DefaultConnection") ???????{ ???????} ???????public DbSet<ImageModle> Images { get; set; } ???} public class ImageData : DropCreateDatabaseIfModelChanges<ImageMangeEntities> ???{ ???????protected override void Seed(ImageMangeEntities context) ???????{ ???????????context.Images.Add(new ImageModle() { ImageUrl = "~/Images/9662C9V1UU02.jpg", ImageName = "图片1", HitCount = 1, UploadDateTime = DateTime.Now }); ???????????context.Images.Add(new ImageModle() { ImageUrl = "~/Images/1343698710MJjSR8.jpg", ImageName = "图片2", HitCount = 1, UploadDateTime = DateTime.Now }); ???????????context.Images.Add(new ImageModle() { ImageUrl = "~/Images/1343698710MJjSR8.jpg", ImageName = "图片3", HitCount = 1, UploadDateTime = DateTime.Now }); ???????????context.Images.Add(new ImageModle() { ImageUrl = "~/Images/9662C9V1UU02.jpg", ImageName = "图片4", HitCount = 1, UploadDateTime = DateTime.Now }); ???????????context.Images.Add(new ImageModle() { ImageUrl = "~/Images/1343698710MJjSR8.jpg", ImageName = "图片5", HitCount = 1, UploadDateTime = DateTime.Now }); ???????????context.Images.Add(new ImageModle() { ImageUrl = "~/Images/9662C9V1UU02.jpg", ImageName = "图片6", HitCount = 1, UploadDateTime = DateTime.Now }); ???????????context.Images.Add(new ImageModle() { ImageUrl = "~/Images/1343698710MJjSR8.jpg", ImageName = "图片7", HitCount = 1, UploadDateTime = DateTime.Now }); ???????????context.Images.Add(new ImageModle() { ImageUrl = "~/Images/1343698710MJjSR8.jpg", ImageName = "图片8", HitCount = 1, UploadDateTime = DateTime.Now }); ???????????context.Images.Add(new ImageModle() { ImageUrl = "~/Images/9662C9V1UU02.jpg", ImageName = "图片9", HitCount = 1, UploadDateTime = DateTime.Now }); ???????????context.Images.Add(new ImageModle() { ImageUrl = "~/Images/1343698713w8Epfw.jpg", ImageName = "图片10", HitCount = 1, UploadDateTime = DateTime.Now }); ???????????context.Images.Add(new ImageModle() { ImageUrl = "~/Images/1343698710MJjSR8.jpg", ImageName = "图片11", HitCount = 1, UploadDateTime = DateTime.Now }); ???????????context.Images.Add(new ImageModle() { ImageUrl = "~/Images/9662C9V1UU02.jpg", ImageName = "图片12", HitCount = 1, UploadDateTime = DateTime.Now }); ???????????context.Images.Add(new ImageModle() { ImageUrl = "~/Images/9662C9V1UU02.jpg", ImageName = "图片13", HitCount = 1, UploadDateTime = DateTime.Now }); ???????????context.Images.Add(new ImageModle() { ImageUrl = "~/Images/1343698713w8Epfw.jpg", ImageName = "图片14", HitCount = 1, UploadDateTime = DateTime.Now }); ???????????context.Images.Add(new ImageModle() { ImageUrl = "~/Images/1343698713w8Epfw.jpg", ImageName = "图片15", HitCount = 1, UploadDateTime = DateTime.Now }); ???????????context.SaveChanges(); ???????} ???}

主页

     主页的构成很简单,中间是个ul列表,右边是点击排行榜,分页主要是利用PagedListPager扩展方法,View和Control如下

ImageMangeEntities ImageDB = new ImageMangeEntities(); ???????public ActionResult Index(int? page) ???????{ ???????????List<ImageModle> model = new List<ImageModle>(); ???????????model = ImageDB.Images.ToList(); ???????????int pagenumber = page ?? 1; ???????????var retmodel = model.ToPagedList(pagenumber, 12); ???????????return View(retmodel); ???????}
@model IPagedList<MusicStoreTest.Models.ImageModle>@{ViewBag.Title = "主页";}@using PagedList;@using PagedList.Mvc;<h2>图片浏览</h2><div style="float: left;"> ???<ul id="album-list"> ???????@foreach (var item in Model) ???????{ ???????????<li><a href="@Url.Action("Details", "Image", ????????????????????????????new {id = item.Id})"> ???????????????????<img style="width: 100px; height: 100px" alt="@item.ImageName" src="@Url.Content(@item.ImageUrl)"/> ???????????????????<span >@item.ImageName</span> </a> ???????????</li> ???????} ???</ul> ??</div><div style="float:left;"> ????????@{Html.RenderAction("ImageHitList");}</div> <div ?style="vertical-align: middle; clear: both;margin-left: 50px"> ??????????????@Html.PagedListPager((IPagedList) Model, page => Url.Action("Index", new {page = page}))</div>

点击量计算实现
    要实现同一时间段内不算点击量累计,可以用HttpContext.Session实现,就定30分钟期限吧,30分钟内无操作就可以继续计算点击量,如下

 ????????<sessionState timeout="30"/>
 ???????public ActionResult Details(int id) ???????{ ???????????List<ImageModle> model = new List<ImageModle>(); ???????????var item = ImageDB.Images.Find(id); ???????????var session = HttpContext.Session[id.ToString()]; ???????????if (session == null) ???????????{ ???????????????HttpContext.Session[id.ToString()] = "browseId"; ???????????????item.HitCount = item.HitCount + 1; ???????????????ImageDB.Entry(item).State = EntityState.Modified; ??????????????????????????ImageDB.SaveChanges(); ???????????} ???????????ViewBag.ImageName = item.ImageName; ???????????ViewBag.ImageUrl = item.ImageUrl;return View(); ???????}

上传图片
     还有上传图片功能,要加上[Authorize]特性实现登录后才能上传图片,如下

 ???????[HttpPost] ???????[Authorize] ???????public JsonResult UploadImage(HttpPostedFileBase image) ???????{ ???????????if (image != null) ???????????{ ???????????????string guid = ?Guid.NewGuid().ToString(); ???????????????string fileName = Path.GetFileName(image.FileName); ???????????????string filePath = Path.Combine(Server.MapPath("~/Files"), guid + "-" + fileName); ???????????????string clientPath = "/Files/" + guid + "-" + fileName; ???????????????image.SaveAs(filePath); ???????????????ImageModle imageModle = new ImageModle(); ???????????????imageModle.ImageName = ?fileName; ???????????????imageModle.ImageUrl = clientPath; ???????????????imageModle.HitCount = 0; ???????????????imageModle.Uploader = User.Identity.Name; ???????????????imageModle.UploadDateTime=DateTime.Now; ???????????????ImageDB.Images.Add(imageModle); ???????????????ImageDB.SaveChanges(); ???????????????return Json(new { success = true, result = clientPath }); ???????????} ???????????else ???????????{ ???????????????return Json(new { success = false, msg = "上传失败!" }); ???????????} ???????}
@{ ???ViewBag.Title = "UploadImage";}<h2 id="ssss">上传图片</h2>@using (Html.BeginForm("UploadImage", "Image", FormMethod.Post, new { enctype = "multipart/form-data", id = "ImageForm" })){ ???<img ?alt="请上传图片" id="img" width="800" height="500"/> ???<input type="file" id="imageInput" name="image" accept="image/gif,image/jpeg,image/png,gif|jpg|png"/> ???<input type="button" id="btn" value="提交"/> ???<span class="img-msg"></span>}@section Scripts { ???<script> ????????????????$(‘#imageInput‘).change(function () { ???????????if ($(this).val().length > 0) { ???????????????var file = this.files[0]; ????????????????var reader = new FileReader(); ???????????????reader.onload=function (e) ???????????????{ ???????????????????$("#img").attr("src", e.target.result); ???????????????} ???????????????reader.readAsDataURL(file); ???????????} ???????}); ???????????$(‘#btn‘).click(function () { ???????????if ($("#imageInput").val().length > 0) { ???????????????alert($("#imageInput").val()); ???????????????$(‘#ImageForm‘).ajaxSubmit({ ???????????????????dataType: ‘json‘, ???????????????????success: function (data) { ???????????????????????$(‘.img-msg‘).text(""); ???????????????????????if (data.success) { ???????????????????????????$("#img").attr("src", data.result); ???????????????????????} else { ???????????????????????????alert(data.msg); ???????????????????????} ???????????????????}, ???????????????????error: function () { ???????????????????????alert("上传失败"); ???????????????????}, ???????????????????beforeSend: function () { ???????????????????????$(‘.img-msg‘).text("正在上传,请稍后..."); ???????????????????} ???????????????}); ???????????} ???????}); ???</script>}

小结

     做这么一个网站很简单,熟练的人大概半个小时就可以完成了,但这是入门的必修课.另外,当完成第一个网站时,你就会发现MVC之路才是刚刚开始.

 
 
标签: MVC

【MVC】快速构建一个图片浏览网站

原文地址:https://www.cnblogs.com/zxtceq/p/9104505.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved