asp.net MVC Ajax.BeginForm 异步上传图片的问题

当debug到这里,你们就发现不管是 Request.Files["Upload"]亦或 Request.Files[0] 都不会取到文件流。
这就是我要说的,当使用Ajax.BeginForm(jquery.unobtrusive-ajax.js) 异步上传是不可行的,因为文件流不会被C#代码读取,但是并不影响 Ajax.BeginForm(jquery.unobtrusive-ajax.js) 异步提交表单的特性。
那我我们应该如何异步提交表单呢?
利用 $("#formID").ajaxSubmit({});这个方法异步提交表单并且上传文件。
第一步:引入js 注意顺序
<script src="/Style/js/jquery-1.8.3.min.js"></script>
<script src="~/Style/js/jquery-form.js"></script>
jquery-form.js下载地址:http://download.csdn.net/download/yusewuhen/7203209
第二步:
<form id="formID" method="post" enctype="multipart/form-data">
<div class="inner text-center">
<table class="" id="mess">
<caption>基础信息</caption>
<tr class="margin-top">
<td class="padding-top text-center">手机号</td>
<td><input type="text" class="inputs" id="Phone" name="Phone"> </td>
<td><input type="button" value="获取验证码" id="sms" onclick="sendemail()"></td>
</tr>
<tr>
<td class="padding-top text-center">验证码</td>
<td><input type="text" class="inputs" id="Code" name="Code"></td>
</tr>
<tr>
<td class="padding-top text-center">身份证</td>
<td><input type="text" class="inputs" id="IdCard" name="IdCard"></td>
</tr>
<tr>
<td class="padding-top text-center">身份证照片</td>
<td>
<div class="ge_pic_icon_Infor">
<img src="data:images/zhengmian.png" />
</div>
<div class="Infor_file">
<input type="file" name="IdCardPos" id="IdCardPos" title="上传身份证正面照片" />
</div>
</td>
<td>
<div class="ge_pic_icon_Infor2">
<img src="data:images/fanmian.png" />
</div>
<div class="Infor_file2">
<input type="file" name="IdCardNeg" id="IdCardNeg" title="上传身份证反面照片" />
</div>
</td>
</tr>
</table>
<input class="submit next-btn" type="button" value="下一步" onclick="next_step()" />
</div>
</form>
第三步:js处理异步提交
function next_step() {
$("#formID").ajaxSubmit({
url: "/College/BaseInfo",
type: "post",
success: function (data) {
//alert("ok");
$(".detail-message6").css({ "display": "none" });
$(".detail-message7").css({ "display": "block" });
},
error: function (aa) {
//console.log(aa);
$(".detail-message2").css({ "display": "none" });
$(".detail-message6").css({ "display": "block" });
$(".detail-message7").css({ "display": "none" });
}
});
}
第四步:后台控制器处理
public ActionResult BaseInfo()
{
//上传的图片路径
string dir = "/Style/Upload/IdCard/";
HttpPostedFileBase IdCardPos = Request.Files["IdCardPos"];
HttpPostedFileBase IdCardNeg = Request.Files["IdCardNeg"];
#region 接收参数校验
if (string.IsNullOrWhiteSpace(Request["Phone"]))
{
return Content("手机号不能为空!");
}
if (string.IsNullOrWhiteSpace(Request["Code"]))
{
return Content( "验证码不能为空!");
}
if (string.IsNullOrWhiteSpace(Request["IdCard"]))
{
return Content( "身份证号不能为空!");
}
if (IdCardPos == null)
{
return Content("请上传身份证正面照片!");
}
if (IdCardNeg == null)
{
return Content("请上传身份证反面照片!");
}
#endregion //获取缓存的验证码
Object Code = CacheOpt.GetCache("Code");
if (Code.ToString() != Request["Code"] || String.IsNullOrEmpty(Code.ToString()))
{
return Content("手机验证码不正确或已失效,请重新获取验证码!");
} #region 上传身份证照片
Dictionary<string, string> DicInfo = new Dictionary<string, string>();
Dictionary<string, string> DicInfo2 = new Dictionary<string, string>();
try
{
DicInfo = UploadImg(IdCardPos, dir);
if (DicInfo["Result"] == "")
{
return Content("身份证正面照片上传的类型错误!");
} DicInfo2 = UploadImg(IdCardNeg, dir);
if (DicInfo2["Result"] == "")
{
return Content("身份证反面照片上传的类型错误!");
}
}
catch
{
return Content("身份证正照片上传失败!");
}
#endregion #region 将数据提添加到集合中
Dictionary < string, string> myDic = new Dictionary<string, string>();
myDic.Add("Phone", Request["Phone"]);
myDic.Add("IdCard", Request["IdCard"]);
myDic.Add("IdCardPos", DicInfo["ImagePath"]);
myDic.Add("IdCardNeg", DicInfo2["ImagePath"]);
myDic.Add("Status", Convert.ToString(""));
#endregion #region 添加数据到数据库
bool res = collegeService.AddBaseInfo1(myDic);
if (res == false)
{
return Content("fail");
}
#endregion
return Content("ok");
}
#region 上传图片
private Dictionary<string, string> UploadImg(HttpPostedFileBase file, string dir)
{
string Image_Path = null; //保存的文件
Dictionary<string, string> DicInfo = new Dictionary<string, string>(); //返回的文件信息 //判断上传文件的类型
string fileName = Path.GetFileName(file.FileName); //获取文件名
string fileExt = Path.GetExtension(fileName); //获取扩展名 if (fileExt == ".jpg" || fileExt == ".gif" || fileExt == ".png")
{
//创建文件夹
Directory.CreateDirectory(Path.GetDirectoryName(Request.MapPath(dir)));
//需要对上传的文件进行重命名
string newfileName = Guid.NewGuid().ToString();
//构建文件完整路径
string fullDir = dir + newfileName + fileExt;
file.SaveAs(Request.MapPath(fullDir)); //保存文件
//将上传成功的图片的路径存到数据库中
Image_Path = newfileName + fileExt;
DicInfo.Add("ImagePath", Image_Path);
DicInfo.Add("Result","");
}
else
{
DicInfo.Add("ImagePath", "");
DicInfo.Add("Result", "");
}
return DicInfo;
}
#endregion
当debug到这里,你们就发现不管是 Request.Files["Upload"]亦或是 Request.Files[0] 都可以取到文件流。
当controller返回值也可以成功进入seccess方法中。
请注意我代码中标红的位置,以防遗漏导致一直debug无果问题!
总结一下:
1.MV5 5.0中异步提交表单方法两种:
Ajax.BeginForm(new AjaxOptions:post) 和 $("#formID").ajaxSubmit({})
2.MVC 5.0中异步提交表单上传文件一种:
$("#formID").ajaxSubmit({})
asp.net MVC Ajax.BeginForm 异步上传图片的问题的更多相关文章
- 关于MVC Ajax.BeginForm()异步上传文件的问题
问题描述: 如果用juqery原生的异步上传方式,只要如下方法即可 $.ajax({ type: "GET", url: "test.json", data: ...
- MVC Ajax.BeginForm 提交上传图片
吃水不忘挖井人,如果对你有帮助,请说声谢谢.如果你要转载,请注明出处.谢谢! 异步提交时,出现图片不能上传. 起初我定格在 System.Web.Mvc 中.查询源码时,也是没有问题的.那问题出现 ...
- Asp.net Mvc Ajax.BeginForm提交表单
之前Mvc中一直用Html.BeginForm提交表单,即如下: @using (Html.BeginForm("Add", "News", FormMetho ...
- asp.net mvc Ajax.BeginForm不能异步刷新,或转到新页面,或页面还是刷新了,的原因(或解决办法)(转)
昨天搞了一下午的Ajax.BeginForm都没能实现异步刷新,一直将返回的数据提交到新的页面,在网上搜了n多方法都不行,问了n多人都没能搞定,今天大一早,就意外的被我发现了问题所在. 布局页: &l ...
- MVC 5.0(or5.0↓) Ajax.BeginForm 异步上传附件问题,答案是不能的!
MVC 5.0(or5.0↓) Ajax.BeginForm 异步上传附件问题,答案是不能的! (请注意我这里说的异步!) 来看一下下面这段一步提交file的代码 //前台 .cshtml 文件 & ...
- ASP.NET MVC中使用异步控制器
线程池 一直想把项目改写成异步,但是ASP.NETMVC3下写的过于繁琐,.NET 4.5与ASP.NET MVC下代码写起来就比较简单了, MS好像也一直喜欢这样搞,每一个成熟的东西,都要演变好几个 ...
- 在 ASP.NET MVC 中使用异步控制器
线程池 一直想把项目改写成异步,但是ASP.NETMVC3下写的过于繁琐,.NET 4.5与ASP.NET MVC下代码写起来就比较简单了, MS好像也一直喜欢这样搞,每一个成熟的东西,都要演变好几个 ...
- MVC Ajax.BeginForm重复提交解决方法
mvc使用MVC Ajax.BeginForm提交的时候有重复提交结果的时候检查相关js文件引用情况, 其中mvc4注意 1 2 3 4 @Scripts.Render("~/bundles ...
- Asp.Net MVC Ajax
将ASP.NET MVC中的form提交改为ajax提交 在ASP.NET MVC视图中通过 @using (Html.BeginForm()) 产生的是form表单提交代码,可以用javascrip ...
随机推荐
- If I were you
别让孩子输在起跑线上,这句话有道理吗? 答:和别人比较是人生悲剧的源头. 做哪些事情可以提高生活的品质? 答:定期扔东西. 结婚以后,两个人在一起最重要的是什么? 答:就当这婚还没结呢. 去做你害怕的 ...
- 项目DEMO下载
1.mybatis_generator自动生成代码demo github项目地址:https://github.com/JsonShare/mybatis_generator 2.设计模式解密系列示例 ...
- Elasticsearch,Kibana,Logstash,NLog实现ASP.NET Core 分布式日志系统
Elasticsearch - 简介 Elasticsearch 作为核心的部分,是一个具有强大索引功能的文档存储库,并且可以通过 REST API 来搜索数据.它使用 Java 编写,基于 Apac ...
- 初探JavaScript的截图实现
最近参与了网易炉石盒子的相关页面开发,在做卡组分享页(地址:炉石盒子卡组分享),有个需求:用户可以把这个卡组以图片的形式分享给好友.最初的的做法是使用服务器把该页面转换成图片,然后把图片地址返回给前端 ...
- 【CSS】盒子模型 之 IE 与W3C的盒子模型对比
摘要 主要看这两种盒子模型的优缺点及适用场景 一.区别 标准 W3C 盒子模型的 content 部分不包含其他部分. IE 盒子模型的 content 部分包含了 border 和 padding. ...
- python有三种导入模块的方法(转)
原文:http://www.cnblogs.com/allenblogs/archive/2011/11/15/2055149.html python有三种导入模块的方法 其一, import mod ...
- spring boot 整合mybatis + swagger2
之前使用springMVC+spring+mybatis,总是被一些繁琐的xml配置,有时候如果配置出错,还要检查各种xml配置,偶然接触到了spring boot 后发现搭建一个web项目真的是1分 ...
- ASP.NET Core 源码学习之 Logging[2]:Configure
在上一章中,我们对 ASP.NET Logging 系统做了一个整体的介绍,而在本章中则开始从最基本的配置开始,逐步深入到源码当中去. 默认配置 在 ASP.NET Core 2.0 中,对默认配置做 ...
- 关于wordpress后台首页加载ajax.googleapis特别慢的解决办法
通过审查元素发现,拖慢后台加载速度的主要是两个路径 1.https://ajax.googleapis.com/ajax/libs/prototype/1.7.1.0/prototype.js 2.h ...
- HashMap 源码解读
HashMap在JDK1.7和1.8中有了很大的改变,空闲时间对HashMap做了一点点的研究. HashMap是一种数组和链表结合的数据结构,我们每次new一个HashMap时,都会构造出一个长度为 ...