我曾经试过使用JSAjaxFileUploader插件来把文件、照片以异步的方式上传,就像"MVC文件图片ajax上传轻量级解决方案,使用客户端JSAjaxFileUploader插件01-单文件上传"中说的,这种方法足够轻、足够好。但今天,要在前面的基础上再增加2个需求:

1、异步判断上传的图片是否超过最大限制
2、把上传的图片裁剪成大中小3张图片,分别保存,删除的时候一块被删除

上传图片如果超出最大尺寸限制,终止上传,并报错误信息。

前台上传图片,显示缩略图。

在项目根目录下的指定文件夹AjaxUpload中同时有了大中小3张图片。

点击图片行的删除按钮或重新上传新的图片,原先的大中小3张图片一块被删除。重新上传新图片:

在项目根目录下的指定文件夹AjaxUpload中同时有了新的大中小3张图片。

前端还是使用JSAjaxFileUploader插件,后端使用ImageResizer组件实现对图片的裁剪和保存。

当前端拿到异步请求的返回结果后,需要显示图片、记录下图片的名称、错误信息等,可以把这些信息封装到UploadFileResult类中,让服务端以json格式返回。

  1. http://www.cnblogs.com/namespace MvcApplication1.Models
  1. {
  1. http://www.cnblogs.com/public http://www.cnblogs.com/class UploadFileResult
  1. {
  1. http://www.cnblogs.com/public http://www.cnblogs.com/string LargeFileName { http://www.cnblogs.com/get; http://www.cnblogs.com/set; } http://www.cnblogs.com///带后缀名的图片名称,比如:20141112_large.jpg
  1. http://www.cnblogs.com/public http://www.cnblogs.com/string MediumFileName { http://www.cnblogs.com/get; http://www.cnblogs.com/set; }
  1. http://www.cnblogs.com/public http://www.cnblogs.com/string SmallFileName { http://www.cnblogs.com/get; http://www.cnblogs.com/set; }
  1. http://www.cnblogs.com/public http://www.cnblogs.com/int Length { http://www.cnblogs.com/get; http://www.cnblogs.com/set; } http://www.cnblogs.com///图片的字节数
  1. http://www.cnblogs.com/public http://www.cnblogs.com/string Type { http://www.cnblogs.com/get; http://www.cnblogs.com/set; } http://www.cnblogs.com///图片的类型:image/jpeg
  1. http://www.cnblogs.com/public http://www.cnblogs.com/bool IsValid { http://www.cnblogs.com/get; http://www.cnblogs.com/set; } http://www.cnblogs.com///用来判断是否超过尺寸最大限制
  1. http://www.cnblogs.com/public http://www.cnblogs.com/string Message { http://www.cnblogs.com/get; http://www.cnblogs.com/set; }
  1. http://www.cnblogs.com/public http://www.cnblogs.com/string LargeFilePath { http://www.cnblogs.com/get; http://www.cnblogs.com/set; } http://www.cnblogs.com///图片的保存路径:~/AjaxUpload/20141112_large.jpg
  1. http://www.cnblogs.com/public http://www.cnblogs.com/string MediumFilePath { http://www.cnblogs.com/get; http://www.cnblogs.com/set; }
  1. http://www.cnblogs.com/public http://www.cnblogs.com/string SmallFilePath { http://www.cnblogs.com/get; http://www.cnblogs.com/set; }
  1. }
  1. }

以上,
○ LargeFileName用来保存裁剪大图的名称,类似"20141112_large.jpg",当前台需要删除图片的时候,还需要把这个图片名称传递给服务端,再到指定文件夹删除图片。
○ LargeFilePath用来保存图片的路径,类似"~/AjaxUpload/20141112_large.jpg",前台显示图片的时候需要这个。
○ IsValid为true表示可以裁剪保存图片,为false表示超过最大的尺寸限制,取消上传

通过NuGet安装ImageResizer。安装完后,在"引用"下面多了一个ImageResizer组件。

创建HomeController,主要完成以下工作:
1、接收前台上传图片,裁剪成大中小图片并分别保存
2、接收前台需要删除的图片名称,在指定文件夹中同时删除大中小图片
3、提供递归统计指定文件夹大小的方法
......

  1. http://www.cnblogs.com/using System;
  1. http://www.cnblogs.com/using System.Collections.Generic;
  1. http://www.cnblogs.com/using System.IO;
  1. http://www.cnblogs.com/using System.Web;
  1. http://www.cnblogs.com/using System.Web.Mvc;
  1. http://www.cnblogs.com/using ImageResizer;
  1. http://www.cnblogs.com/using MvcApplication1.Models;
  1.  
  1. http://www.cnblogs.com/namespace MvcApplication1.Controllers
  1. {
  1. http://www.cnblogs.com/public http://www.cnblogs.com/class HomeController : Controller
  1. {
  1.  
  1. http://www.cnblogs.com/public ActionResult Index()
  1. {
  1. http://www.cnblogs.com/return View();
  1. }
  1.  
  1. [HttpPost]
  1. http://www.cnblogs.com/public ActionResult UploadFile()
  1. {
  1. http://www.cnblogs.com///需要返回给前台的结果
  1. List<UploadFileResult> results = http://www.cnblogs.com/new List<UploadFileResult>();
  1.  
  1. http://www.cnblogs.com///遍历从前台传递而来的文件
  1. http://www.cnblogs.com/foreach (http://www.cnblogs.com/string file http://www.cnblogs.com/in Request.Files)
  1. {
  1. http://www.cnblogs.com///把每一个上传文件封装成HttpPostedFileBase
  1. HttpPostedFileBase hpf = Request.Files[file] http://www.cnblogs.com/as HttpPostedFileBase;
  1.  
  1. http://www.cnblogs.com///如果前台传来的文件集合中有null,继续遍历其他文件
  1. http://www.cnblogs.com/if (hpf.ContentLength == 0 || hpf == http://www.cnblogs.com/null)
  1. {
  1. http://www.cnblogs.com/continue;
  1. }
  1.  
  1. http://www.cnblogs.com///给上传文件改名
  1. http://www.cnblogs.com/string date = DateTime.Now.ToString("http://www.cnblogs.com/yyyyMMddhhmmss");
  1.  
  1. http://www.cnblogs.com///目标文件夹的相对路径 ImageSize需要的格式
  1. http://www.cnblogs.com/string pathForSaving = Server.MapPath("http://www.cnblogs.com/~/AjaxUpload/");
  1.  
  1. http://www.cnblogs.com///目标文件夹的相对路径 统计文件夹大小需要的格式
  1. http://www.cnblogs.com/string pathForSaving1 = Server.MapPath("http://www.cnblogs.com/~/AjaxUpload");
  1.  
  1. http://www.cnblogs.com///保存文件并返回结果
  1. http://www.cnblogs.com/if (http://www.cnblogs.com/this.CreateFolderIfNeeded(pathForSaving))
  1. {
  1. http://www.cnblogs.com/long currentSize = GetDirectoryLength(pathForSaving1);
  1.  
  1. http://www.cnblogs.com///如果大于最大限制,直接返回json信息
  1. http://www.cnblogs.com///1M=1024*1024个字节
  1. http://www.cnblogs.com/if (currentSize + hpf.ContentLength > 50 * 1024 * 1024)http://www.cnblogs.com///最大允许50兆
  1. {
  1. results.Add(http://www.cnblogs.com/new UploadFileResult()
  1. {
  1. LargeFileName = "http://www.cnblogs.com/"
  1. LargeFilePath = "http://www.cnblogs.com/"
  1. MediumFileName = "http://www.cnblogs.com/"
  1. MediumFilePath = "http://www.cnblogs.com/"
  1. SmallFileName = "http://www.cnblogs.com/"
  1. SmallFilePath = "http://www.cnblogs.com/"
  1. IsValid = http://www.cnblogs.com/false,
  1. Length = hpf.ContentLength
  1. Message = "http://www.cnblogs.com/超过最大限制无法上传"
  1. Type = hpf.ContentType
  1. });
  1. }
  1. http://www.cnblogs.com/else http://www.cnblogs.com///如果小于最大限制,才保存大中小图片
  1. {
  1. http://www.cnblogs.com///保存图片的各种版本:小图,中图,大图
  1. var versions = http://www.cnblogs.com/new Dictionary<http://www.cnblogs.com/string, http://www.cnblogs.com/string>();
  1. versions.Add("http://www.cnblogs.com/_small" "http://www.cnblogs.com/maxwidth=50&maxheight=50&format=jpg");
  1. versions.Add("http://www.cnblogs.com/_medium" "http://www.cnblogs.com/maxwidth=200&maxheight=200&format=jpg");
  1. versions.Add("http://www.cnblogs.com/_large" "http://www.cnblogs.com/maxwidth=600&maxheight=600&format=jpg");
  1.  
  1. http://www.cnblogs.com///保存各个版本的缩略图
  1. http://www.cnblogs.com/foreach (var key http://www.cnblogs.com/in versions.Keys)
  1. {
  1. hpf.InputStream.Seek(0 SeekOrigin.Begin);
  1. ImageBuilder.Current.Build(http://www.cnblogs.com/new ImageJob(
  1. hpf.InputStream
  1. pathForSaving + date + key http://www.cnblogs.com///不带后缀名的图片名称
  1. http://www.cnblogs.com/new Instructions(versions[key]),
  1. http://www.cnblogs.com/false,http://www.cnblogs.com///是否保留原图
  1. http://www.cnblogs.com/true));http://www.cnblogs.com///是否增加后缀
  1. }
  1.  
  1.  
  1. results.Add(http://www.cnblogs.com/new UploadFileResult()
  1. {
  1. LargeFileName = date + "http://www.cnblogs.com/_large" + "http://www.cnblogs.com/.jpg"
  1. LargeFilePath = Url.Content(String.Format("http://www.cnblogs.com/~/AjaxUpload/{0}" date + "http://www.cnblogs.com/_large" + "http://www.cnblogs.com/.jpg")),
  1. MediumFileName = date + "http://www.cnblogs.com/_medium" + "http://www.cnblogs.com/.jpg"
  1. MediumFilePath = Url.Content(String.Format("http://www.cnblogs.com/~/AjaxUpload/{0}" date + "http://www.cnblogs.com/_mediume" + "http://www.cnblogs.com/.jpg")),
  1. SmallFileName = date + "http://www.cnblogs.com/_small" + "http://www.cnblogs.com/.jpg"
  1. SmallFilePath = Url.Content(String.Format("http://www.cnblogs.com/~/AjaxUpload/{0}" date + "http://www.cnblogs.com/_small" + "http://www.cnblogs.com/.jpg")),
  1. IsValid = http://www.cnblogs.com/true,
  1. Length = hpf.ContentLength
  1. Message = "http://www.cnblogs.com/上传成功"
  1. Type = hpf.ContentType
  1. });
  1. }
  1.  
  1. }
  1. }
  1.  
  1. http://www.cnblogs.com///单文件上传,实际上results中只有一个元素
  1. http://www.cnblogs.com/return Json(http://www.cnblogs.com/new
  1. {
  1. largename = results[0].LargeFileName
  1. largepath = results[0].LargeFilePath
  1. mediumname = results[0].MediumFileName
  1. mediumpath = results[0].MediumFilePath
  1. smallname = results[0].SmallFileName
  1. smallpath = results[0].SmallFilePath
  1. type = results[0].Type
  1. size = http://www.cnblogs.com/string.Format("http://www.cnblogs.com/{0} bytes", results[0].Length),
  1. msg = results[0].Message
  1. isvalid = results[0].IsValid
  1. });
  1. }
  1.  
  1.  
  1. http://www.cnblogs.com///根据文件名称删除文件
  1. [HttpPost]
  1. http://www.cnblogs.com/public ActionResult DeleteFileByNames(http://www.cnblogs.com/string largename, http://www.cnblogs.com/string mediumname, http://www.cnblogs.com/string smallname)
  1. {
  1. http://www.cnblogs.com/string pathForSaving = Server.MapPath("http://www.cnblogs.com/~/AjaxUpload");
  1. System.IO.File.Delete(Path.Combine(pathForSaving largename));
  1. System.IO.File.Delete(Path.Combine(pathForSaving mediumname));
  1. System.IO.File.Delete(Path.Combine(pathForSaving smallname));
  1. http://www.cnblogs.com/return Json(http://www.cnblogs.com/new
  1. {
  1. msg = http://www.cnblogs.com/true
  1. });
  1. }
  1.  
  1. http://www.cnblogs.com//// <summary>
  1. http://www.cnblogs.com//// 根据目标文件夹的相对路径创建文件夹
  1. http://www.cnblogs.com//// 如果目标文件夹不存在,就创建;存在就不创建
  1. http://www.cnblogs.com//// 只有在创建目标文件夹发生异常的时候才返回false
  1. http://www.cnblogs.com//// </summary>
  1. http://www.cnblogs.com//// <param name="path">目标文件夹的相对路径</param>
  1. http://www.cnblogs.com//// <returns></returns>
  1. http://www.cnblogs.com/private http://www.cnblogs.com/bool CreateFolderIfNeeded(http://www.cnblogs.com/string path)
  1. {
  1. http://www.cnblogs.com/bool result = http://www.cnblogs.com/true;
  1. http://www.cnblogs.com/if (!Directory.Exists(path))
  1. {
  1. http://www.cnblogs.com/try
  1. {
  1. Directory.CreateDirectory(path);
  1. }
  1. http://www.cnblogs.com/catch (Exception)
  1. {
  1. result = http://www.cnblogs.com/false;
  1. }
  1. }
  1. http://www.cnblogs.com/return result;
  1. }
  1.  
  1. http://www.cnblogs.com//// <summary>
  1. http://www.cnblogs.com//// 根据目标文件夹的相对路径递归计算该文件夹的大小
  1. http://www.cnblogs.com//// </summary>
  1. http://www.cnblogs.com//// <param name="path">用相对路径表示的目标文件夹</param>
  1. http://www.cnblogs.com//// <returns></returns>
  1. http://www.cnblogs.com/private http://www.cnblogs.com/static http://www.cnblogs.com/long GetDirectoryLength(http://www.cnblogs.com/string path)
  1. {
  1. http://www.cnblogs.com///如果目标文件夹不存在就返回0
  1. http://www.cnblogs.com/if (!Directory.Exists(path))
  1. {
  1. http://www.cnblogs.com/return 0;
  1. }
  1.  
  1. http://www.cnblogs.com/long size = 0;
  1.  
  1. http://www.cnblogs.com///获取目标文件夹的信息
  1. DirectoryInfo di = http://www.cnblogs.com/new DirectoryInfo(path);
  1.  
  1. http://www.cnblogs.com///遍历目标文件夹下的所有文件遍历累计每个文件的大小
  1. http://www.cnblogs.com/foreach (FileInfo fi http://www.cnblogs.com/in di.GetFiles())
  1. {
  1. size += fi.Length;
  1. }
  1.  
  1. http://www.cnblogs.com///获取目标文件夹下的所有子文件夹
  1. DirectoryInfo[] dis = di.GetDirectories();
  1.  
  1. http://www.cnblogs.com///如果确实有子文件夹
  1. http://www.cnblogs.com/if (dis.Length > 0)
  1. {
  1. http://www.cnblogs.com///遍历这些子文件夹
  1. http://www.cnblogs.com/for (http://www.cnblogs.com/int i = 0; i < dis.Length; i++)
  1. {
  1. http://www.cnblogs.com///递归统计累计大小
  1. size += GetDirectoryLength(dis[i].FullName);
  1. }
  1. }
  1.  
  1. http://www.cnblogs.com/return size;
  1. }
  1. }
  1. }

以上,
○ UploadFile方法中,通过Request.Files拿到所有的上传图片,然后遍历这些图片,通过Request.Files[key]获取某个图片,把该图片转换成HttpPostedFileBase类型。在裁剪保存图片之前,使用GetDirectoryLength方法获取当前文件夹的尺寸,如果没有超过尺寸的最大限制,就使用ImageResizer把图片裁剪成大中小3张图片,并分别保存。

○ DeleteFileByNames方法中,从前台接收大中小图片的名称,再到根目录下的指定文件夹AjaxUpload中删除大中小3张图片。

_Layout.cshtml中引入相关css、js文件。JQuery.JSAjaxFileUploaderSingle.js文件已经做了汉化,详细参考这里

  1. <head>
  1. <meta charset="http://www.cnblogs.com/utf-8" />
  1. <meta name="http://www.cnblogs.com/viewport" content="http://www.cnblogs.com/width=device-width" />
  1. <title>@ViewBag.Title</title>
  1. @Styles.Render("http://www.cnblogs.com/~/Content/css")
  1. <link href="http://www.cnblogs.com/~/Content/JSAjaxFileUploader/JQuery.JSAjaxFileUploader.css" rel="http://www.cnblogs.com/stylesheet" />
  1. @Scripts.Render("http://www.cnblogs.com/~/bundles/modernizr")
  1. @Scripts.Render("http://www.cnblogs.com/~/bundles/jquery")
  1. <script src="http://www.cnblogs.com/~/JSAjaxFileUploader/JQuery.JSAjaxFileUploaderSingle.js"></script>
  1. </head>
  1. <body>
  1. @RenderBody()
  1. @RenderSection("http://www.cnblogs.com/scripts" required: http://www.cnblogs.com/false)
  1. </body>

创建Home/Index.cshtml视图,主要工作包括:
1、处理图片上传,每次上传前需要把原先的3张图片删除,如果上传成功显示小图的缩略图,如果上传失败,给出错误提示。
2、提供一个动态创建图片行表格的方法
3、提供一个删除大中小图片的方法,向服务端发送3张图片的名称
......

  1. @{
  1. ViewBag.Title = "http://www.cnblogs.com/Index";
  1. Layout = "http://www.cnblogs.com/~/Views/Shared/_Layout.cshtml";
  1. }
  1.  
  1. <style type="http://www.cnblogs.com/text/css">
  1. #tb table {
  1. border-collapse: collapse;
  1. width: 600px;
  1. }
  1.  
  1. #tb td {
  1. text-align: center;
  1. padding-top: 5px;
  1. width: 25%;
  1. }
  1.  
  1. #tb tr {
  1. background-color: #E3E3E3;
  1. line-height: 35px;
  1. }
  1.  
  1. .limit {
  1. color: red;
  1. }
  1. </style>
  1.  
  1. <div id="http://www.cnblogs.com/testId"></div>
  1.  
  1. <div id="http://www.cnblogs.com/tb">
  1. <table id="http://www.cnblogs.com/tbl">
  1. <tbody>
  1. </tbody>
  1. </table>
  1. </div>
  1.  
  1. <div>
  1. <span http://www.cnblogs.com/class="http://www.cnblogs.com/limit"></span>
  1. </div>
  1.  
  1. @section scripts
  1. {
  1. <script type="http://www.cnblogs.com/text/javascript">
  1. $(function() {
  1. http://www.cnblogs.com///隐藏显示图片的表格
  1. $('#tbl').hide();
  1.  
  1. http://www.cnblogs.com///图片上传
  1. $('#testId').JSAjaxFileUploader({
  1. uploadUrl: '@Url.Action("http://www.cnblogs.com/UploadFile","http://www.cnblogs.com/Home")'
  1. inputText: '选择上传文件'
  1. http://www.cnblogs.com///fileName: 'photo',
  1. maxFileSize: 512000 http://www.cnblogs.com///Max 500 KB file 1kb=1024字节
  1. allowExt: 'gif|jpg|jpeg|png'
  1. zoomPreview: http://www.cnblogs.com/false,
  1. zoomWidth: 360
  1. zoomHeight: 360
  1. beforesend: function (file) {http://www.cnblogs.com///每次点击都要删除原先的
  1. http://www.cnblogs.com/if ($('.largeImgName').text() != "http://www.cnblogs.com/" && $('.mediumImgName').text() != "http://www.cnblogs.com/" && $('.smallImgName').text() != "http://www.cnblogs.com/") {
  1. deleteImg();
  1. $('#tbl').hide();
  1. }
  1. },
  1. success: function (data) {
  1. http://www.cnblogs.com/if (!data.isvalid) { http://www.cnblogs.com///如果尺寸超过最大限制
  1. $('.limit').css("http://www.cnblogs.com/display" "http://www.cnblogs.com/block");
  1. $('.limit').text(data.msg);
  1. http://www.cnblogs.com/return;
  1. } http://www.cnblogs.com/else {
  1. $('.limit').css("http://www.cnblogs.com/display" "http://www.cnblogs.com/none");
  1. createTableTr();
  1. $('#tbl').show();
  1. $('.showImg').attr("http://www.cnblogs.com/src" data.smallpath);http://www.cnblogs.com///显示小图片
  1. $('.largeImgName').text(data.largename); http://www.cnblogs.com///显示大图的名称
  1. $('.mediumImgName').text(data.mediumname); http://www.cnblogs.com///显示中图的名称
  1. $('.smallImgName').text(data.smallname); http://www.cnblogs.com///显示小图的名称
  1. }
  1. },
  1. error: function (data) {
  1. alert(data.msg);
  1. }
  1. });
  1.  
  1. http://www.cnblogs.com///点击删除链接删除刚上传图片
  1. $('#tbl').on("http://www.cnblogs.com/click" "http://www.cnblogs.com/.delImg" function () {
  1. deleteImg();
  1. http://www.cnblogs.com///window.location.reload();
  1. });
  1. });
  1.  
  1. http://www.cnblogs.com///创建表格
  1. function createTableTr() {
  1. var table = $('#tbl');
  1. table.append("http://www.cnblogs.com/<tr><td><img class='showImg'/></td><td colspan='2'><span class='largeImgName'></span><br/><span class='mediumImgName'></span><br/><span class='smallImgName'></span></td><td><a class='delImg' href='javascript:void(0)'>删除</a></td></tr>");
  1. }
  1.  
  1. http://www.cnblogs.com///删除图片方法:点击删除链接或上传新图片删除原先图片用到
  1. function deleteImg() {
  1. $.ajax({
  1. cache: http://www.cnblogs.com/false,
  1. url: '@Url.Action("http://www.cnblogs.com/DeleteFileByNames", "http://www.cnblogs.com/Home")'
  1. type: "http://www.cnblogs.com/POST"
  1. data: { largename: $('.largeImgName').text(), mediumname: $('.mediumImgName').text(), smallname: $('.smallImgName').text() },
  1. success: function (data) {
  1. http://www.cnblogs.com/if (data.msg) {
  1. http://www.cnblogs.com///alert("图片删除成功");
  1. $('.delImg').parent().parent().remove();
  1. }
  1. },
  1. error: function (jqXhr textStatus errorThrown) {
  1. alert("http://www.cnblogs.com/出错了 '" + jqXhr.status + "http://www.cnblogs.com/' (状态: '" + textStatus + "http://www.cnblogs.com/', 错误为: '" + errorThrown + "http://www.cnblogs.com/')");
  1. }
  1. });
  1. }
  1. </script>
  1. }

ASP.NET MVC在服务端把异步上传的图片裁剪成不同尺寸分别保存,并设置上传目录的尺寸限制的更多相关文章

  1. [备忘]Asp.net MVC 将服务端Model传递的对象转为客户端javascript对象

    <script type="text/javascript"> var jsObject = @Html.Raw(Json.Encode(Model.Objects)) ...

  2. Highcharts结合PhantomJS在服务端生成高质量的图表图片

    项目背景 最近忙着给部门开发一套交互式的报表系统,来替换原有的静态报表系统. 老系统是基于dotnetCHARTING开发的,dotnetCHARTING的优势是图表类型丰富,接口调用简单,使用时只需 ...

  3. Asp.net SignalR 实现服务端消息推送到Web端

              之前的文章介绍过Asp.net SignalR,  ASP .NET SignalR是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信.  今天我 ...

  4. asp.net core webapi 服务端配置跨域

    在前后端分离开发中服务端仅仅只为前端提供api接口,并且前后端往往单独部署,此时就会出现浏览器跨域问题.asp.net core提供了简单优雅的解决方案. 在startup文件的Configure添加 ...

  5. Asp.net SignalR 实现服务端消息实时推送到所有Web端

    ASP .NET SignalR是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信.实际上 Asp.net SignalR 2 实现 服务端消息推送到Web端, 更加 ...

  6. 数往知来 ASP.NET 模拟服务器:服务端_静态页面_动态页面的响应<十七>

      一.客户端是怎么看到我们的网页的呢/ 在浏览器端,如果用汉语请求的是一普通的HTML网页,呢么我们的IIS服务器, 接收到请求以后,那么从IIS服务器所在的电脑区查找该HTML网页, 找到以后将该 ...

  7. asp.net MVC发布iis无法加载css,js和图片

    今天真够郁闷的,遇到了在本地能运行的项目到了iis服务器那里就不行了,无法加载css,js和图片,这里说清楚一下先,关于asp.net 的MVC中这样的情况其实不少,但是之前遇到的是在visual s ...

  8. ASP.NET MVC 5 局部视图不支持异步问题

    [ChildActionOnly] public async Task<ActionResult> TopLeftFlowPartialView() { var user = Sessio ...

  9. ASP.NET MVC 使用jquery.form.js 异步上传 在IE下返回值被变为下载的解决办法

    错误记录: <script type="text/javascript"> $(function () { $(document).off("ajaxSend ...

随机推荐

  1. PHP url重定向

    1.使用header()函数 PHP的 HTTP相关函数种提供了一个 header()函数,首先要清楚,header()函数必须放在php程序的开头部分,而且之前不能有另外的 header() 函数或 ...

  2. IDataReader转换成list通用方法

    public static IList<T> ReaderToList<T>(this IDataReader dr) { //DateTime dt = DateTime.N ...

  3. magento问题集2

    SQLSTATE[42S02]: Base table or view not found: 1146 Table XXXXXX 安装Galathemes.com theme插件. 首页无法打开,提示 ...

  4. 作业6 分析项目的NABCD和项目的产品Backlog

    项目scrum:邵家文 NABCD模型分析 N(Need 需求)根据采访用户下面可以得出用户的基本需求:1.小孩说:我想要做适合自己能力的四则运算2.小孩说:我想这个四则运算软件里面的题目越做越提高自 ...

  5. 帝国cms 灵动标签

    [e:loop={栏目ID/专题ID,显示条数,操作类型,只显示有标题图片,附加SQL条件,显示排序}] <a href="<?=$bqsr[titleurl]?>&quo ...

  6. LCS (nlogn)

    最长上升子序列的O(n*logn)算法分析如下: 先回顾经典的O(n^2)的动态规划算法,设a[t]表示序列中的第t个数,dp[t]表示从1到t这一段中以t结尾的最长上升子序列的长度,初始时设dp [ ...

  7. win7 一些快捷系统工具命令

    1.cleanmgr: 打开磁盘清理工具 2.compmgmt.msc: 计算机管理 3.conf: 启动系统配置实用程序 4.charmap: 启动字符映射表 5.calc: 启动计算器 6.chk ...

  8. Mysql数据库搭建-Windows

    首先先下载一下文件包. 下面这个文件包里面包含了已配置的MySQL5.5和连接器. https://www.dropbox.com/s/iu4ifv0m2232ktn/Win_Mysql5_ODBC. ...

  9. Kmeans算法的应用实例(Matlab版本)

    K-means是一种经典的聚类算法,是十大经典数据挖掘算法之一.K-means算法的基本思想是:以空间中k个点为中心进行聚类,对最靠近他们的对象归类.通过迭代的方法,逐次更新各聚类中心的值,直至得到最 ...

  10. banner轮播图js

    例子1: if(!$('.side_ul ul').is(":animated")){            var wli = $('.side_ul li').width()+ ...