当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. Android - FEATURE_NO_TITLE

    Android设置无标题的方法 在onCreate()中写入: requestWindowFeature(Window.FEATURE_NO_TITLE); 例如: protected void on ...

  2. [编辑器]vim常用操作

    我是ide的用户,对于vim一只停留在:打开.看.写.关闭基本操作,因为现在更多的接触linux服务器,所以为了提高 效率,用好vim是必备技能!下面罗列一些vim的常用操作,用做备忘(不断更新): ...

  3. cesium 获取点击点的高程

    var picklHandler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);picklHandler .setInputAct ...

  4. 朋友的发展--->对自己深深地激励。

    从4月5号来厦门开始实习到现在,也断断续续的跟着大佬开始实现需求了,就记录下自己这一段时间的想法吧,可能未来的自己看来会觉得挺可笑的,这个春招,说实话,自己挺失败的,为了求稳,来厦门这边面试美团,以至 ...

  5. JavaScript中的call()、apply()与bind():

    关于call()与apply(): 在JavaScript中,每个函数都有call与apply(),这两个函数都是用来改变函数体内this的指向,并调用相关的参数. 看一个例子: 定义一个animal ...

  6. 使用Nginx搭建本地流媒体服务器

    Mac搭建nginx+rtmp服务器 1.打开终端,查看是否已经安装Homebrew,直接输入命令 man brew 如果Mac已经安装了, 会显示一些命令的帮助信息. 此时输入Q退出即可, 直接进入 ...

  7. Java读取properties文件(非泛滥)

    根据spring配置文件的 PropertiesFactoryBean和 PropertyPlaceholderConfigurer可以选择不同的加载方式,我是使用System.setProperty ...

  8. java实现网页爬虫

    接着上面一篇对爬虫需要的java知识,这一篇目的就是在于网页爬虫的实现,对数据的获取,以便分析. -----> 目录:   1.爬虫原理 2.本地文件数据提取及分析 3.单网页数据的读取 4.运 ...

  9. Hadoop1.0.3安装部署

    0x00 大数据平台相关链接 官网:http://hadoop.apache.org/ 主要参考教程:http://www.cnblogs.com/xia520pi/archive/2012/05/1 ...

  10. 社交系统ThinkSNS+ 发布通知!

    社交系统ThinkSNS 最新版本ThinkSNS+将于7月15日正式发布开源版本web+H5,同时发布Android APP和iOS APP.我们将告别内测阶段,正式对外发布. 没错,你们没看错,就 ...