当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 异步上传图片的问题的更多相关文章

  1. 关于MVC Ajax.BeginForm()异步上传文件的问题

    问题描述: 如果用juqery原生的异步上传方式,只要如下方法即可 $.ajax({ type: "GET", url: "test.json", data: ...

  2. MVC Ajax.BeginForm 提交上传图片

    吃水不忘挖井人,如果对你有帮助,请说声谢谢.如果你要转载,请注明出处.谢谢! 异步提交时,出现图片不能上传. 起初我定格在  System.Web.Mvc  中.查询源码时,也是没有问题的.那问题出现 ...

  3. Asp.net Mvc Ajax.BeginForm提交表单

    之前Mvc中一直用Html.BeginForm提交表单,即如下: @using (Html.BeginForm("Add", "News", FormMetho ...

  4. asp.net mvc Ajax.BeginForm不能异步刷新,或转到新页面,或页面还是刷新了,的原因(或解决办法)(转)

    昨天搞了一下午的Ajax.BeginForm都没能实现异步刷新,一直将返回的数据提交到新的页面,在网上搜了n多方法都不行,问了n多人都没能搞定,今天大一早,就意外的被我发现了问题所在. 布局页: &l ...

  5. MVC 5.0(or5.0↓) Ajax.BeginForm 异步上传附件问题,答案是不能的!

    MVC 5.0(or5.0↓)  Ajax.BeginForm 异步上传附件问题,答案是不能的! (请注意我这里说的异步!) 来看一下下面这段一步提交file的代码 //前台 .cshtml 文件 & ...

  6. ASP.NET MVC中使用异步控制器

    线程池 一直想把项目改写成异步,但是ASP.NETMVC3下写的过于繁琐,.NET 4.5与ASP.NET MVC下代码写起来就比较简单了, MS好像也一直喜欢这样搞,每一个成熟的东西,都要演变好几个 ...

  7. 在 ASP.NET MVC 中使用异步控制器

    线程池 一直想把项目改写成异步,但是ASP.NETMVC3下写的过于繁琐,.NET 4.5与ASP.NET MVC下代码写起来就比较简单了, MS好像也一直喜欢这样搞,每一个成熟的东西,都要演变好几个 ...

  8. MVC Ajax.BeginForm重复提交解决方法

    mvc使用MVC Ajax.BeginForm提交的时候有重复提交结果的时候检查相关js文件引用情况, 其中mvc4注意 1 2 3 4 @Scripts.Render("~/bundles ...

  9. Asp.Net MVC Ajax

    将ASP.NET MVC中的form提交改为ajax提交 在ASP.NET MVC视图中通过 @using (Html.BeginForm()) 产生的是form表单提交代码,可以用javascrip ...

随机推荐

  1. Codeforces_617E: XOR and Favorite Number(莫队算法)

    题目链接 题意大致是说,给出一个长为n(n<=1e5)的数组,给定一个k(k<=1e6),给出m(m<=1e5)个询问,每组询问中回答 从a_l到a_r有多少个连续的子序列满足异或和 ...

  2. 自带win10的笔记本电脑如何装win7

    网上那么多的装机教程,还有必要专门写一篇装机攻略么?有的,非常必要的!因为真的有很多未知的坑要趟!首先,win10好不好?除了正版,其他没什么好的...如果没有SSD,经常要卡死于磁盘读写.当然,你可 ...

  3. bash中(),{},(()),[],[[]]的区别

    前言:在bash中遇到各种括号,同时在进行字符数值比较判定时,总是不断出现问题,于是通过参考<advanced bash-scripting guide>,同时在centos 6.7版本上 ...

  4. 关于Visual Studio调试 无效指针提示

    前几天遇到了这个问题,编译没问题,直接运行没问题 但是一调试,会提示无效指针,(按Ctrl+F5可以运行,但按F5提示无效指针) 只要这样,新建C:\ProgramData\Microsoft Vis ...

  5. EF 中 Code First 的数据迁移以及创建视图

    写在前面: EF 中 Code First 的数据迁移网上有很多资料,我这份并没什么特别.Code First 创建视图网上也有很多资料,但好像很麻烦,而且亲测好像是无效的方法(可能是我太笨,没搞成功 ...

  6. linux下删除文件及文件夹命令

    一.删除空文件与文件夹 rm或rmdir 文件/文件夹 二.删除非空文件与文件夹 rm -rf 文件/文件夹

  7. python常用模块(1):collections模块和re模块(正则表达式详解)

    从今天开始我们就要开始学习python的模块,今天先介绍两个常用模块collections和re模块.还有非常重要的正则表达式,今天学习的正则表达式需要记忆的东西非常多,希望大家可以认真记忆.按常理来 ...

  8. Python初学基础

      初入坑Python,打算跟着沫凡小哥的学习视频打个基础,此篇文章做一些简单的学习记录,加油加油加油啦 沫凡小哥的学习网站:https://morvanzhou.github.io/tutorial ...

  9. HttpRequest 类

    关于此类的介绍:查看HttpRequest类 点击查看:HttpRequest中方法的封装 跟这个类对应的HttpResponse类 定义:使 ASP.NET 能够读取客户端在 Web 请求期间发送的 ...

  10. 20. Valid Parentheses【leetcode】

    20. Valid Parentheses Given a string containing just the characters '(', ')', '{', '}', '[' and ']', ...