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

(请注意我这里说的异步!)

来看一下下面这段一步提交file的代码

//前台 .cshtml 文件

<script src="~/jquery.unobtrusive-ajax.js"></script>
@using (Ajax.BeginForm("upLoadAsync", "UploadFile",
new AjaxOptions {
HttpMethod = "Post",
OnSuccess = "success"
  }
  , new { enctype = "multipart/form-data" }
))
{
<input type="file" id="fileupload" name="Upload" />
<input type="submit" value="上传" id="btn">
} //C#代码

public string upLoadAsync()
{
  HttpPostedFileBase file = Request.Files["Upload"];

  HttpPostedFileBase file = Request.Files[0];

  //其余代码省略

  //......

}

当debug到这里,你们就发现不管是 Request.Files["Upload"]亦或是 Request.Files[0] 都不会取到文件流。

这就是我要说的,当使用Ajax.BeginForm(jquery.unobtrusive-ajax.js) 异步上传是不可行的,因为文件流不会被C#代码读取

但是并不影响 Ajax.BeginForm(jquery.unobtrusive-ajax.js) 异步提交表单的特性。

那我我们应该如何异步提交表单呢?

利用 $("#formID").ajaxSubmit({});这个方法异步提交表单并且上传文件

//前台 .cshtml 文件
<script src="~/jquery.form.js"></script>

<form id="formID" method="post" enctype="multipart/form-data">
    @Html.Hidden("yearNow1", @ViewBag.yearNow as string)//输入一些要提交表单的值

    <input type="file" id="fileupload" name="Upload" />
    <input type="button" value="上传" id="btn">//这里用button代替submit
 </form>

<script type="text/javascript">

 $("#btn").click(function () {
  $("#formID").ajaxSubmit({
url: "@Url.Action("upLoadAsync", "UploadFile")",
type: "post",
success: function (data) {
//......
},
error: function (aa) {
alert(aa);
}
});
});
//C#代码

public string upLoadAsync()
{
  HttpPostedFileBase file = Request.Files["Upload"];


  HttpPostedFileBase file = Request.Files[0];


  //其余代码省略


  //......


}

 

当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({})

MVC 5.0(or5.0↓) Ajax.BeginForm 异步上传附件问题,答案是不能的!的更多相关文章

  1. Ajax.BeginForm 异步上传附件 替代方案

      一:问题描述 含有文件信息表单内容,想通过异步上传到服务器,但是使用Ajax.BeginForm上传时,后台无法获取文件信息 二:解决方案 通过  $.ajaxFileUpload 可以实现文件及 ...

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

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

  3. 文件的上传(表单上传和ajax文件异步上传)

    项目中用户上传总是少不了的,下面就主要的列举一下表单上传和ajax上传!注意: context.Request.Files不适合对大文件进行操作,下面列举的主要对于小文件上传的处理! 资源下载: 一. ...

  4. 普通文件的上传(表单上传和ajax文件异步上传)

    一.表单上传: html客户端部分: <form action="upload.ashx" method="post" enctype="mul ...

  5. 文件的上传(1)(表单上传和ajax文件异步上传)

    文件的上传(表单上传和ajax文件异步上传) 项目中用户上传总是少不了的,下面就主要的列举一下表单上传和ajax上传!注意: context.Request.Files不适合对大文件进行操作,下面列举 ...

  6. 使用FormData实现ajax文件异步上传

    1.传统的web开发文件上传一般是基于form表单的文件上传,同步的方式,用户体验差,可控性也差 2.异步上传的实现 有以下方式 2.1 借助浏览器插件 一般需要安装一些类似flash的插件  这种方 ...

  7. jquery 通过ajax FormData 对象上传附件

    之前上传附件都是用插件,或者用form表单体检(这个是很久以前的方式了),今天突发奇想,自己来实现附件上传,具体实现如下 html: <div>   流程图: <input id=& ...

  8. Ajax图片异步上传并回显

    1.jsp页面 <td width="20%" class="pn-flabel pn-flabel-h"></td> <td w ...

  9. ajaxfileupload异步上传附件添加參数的方法

    1.js文件 // JavaScript Document jQuery.extend({ createUploadIframe: function(id, uri) { //create frame ...

随机推荐

  1. Spark installation for windows

    download spark from spark.apache.org download hadoop from hadoop.apache.org download hadoop.dll and ...

  2. http错误码大全

    响应码由三位十进制数字组成,它们出现在由HTTP服务器发送的响应的第一行.响应码分五种类型,由它们的第一位数字表示:1.1xx:信息,请求收到,继续处理2.2xx:成功,行为被成功地接受.理解和采纳3 ...

  3. 剑指Offer13 链表倒数第K个结点

    /************************************************************************* > File Name: 13_KthNod ...

  4. 第06篇 MyEclipse 2016 安装/破解

    和玩得来的人在一起玩才叫玩! 和玩不来的人在一起玩,那种感觉就像加班啊!                                                                 ...

  5. 转: 微博的多机房部署的实践(from infoq)

    转:  http://www.infoq.com/cn/articles/weibo-multi-idc-architecture 在国内网络环境下,单机房的可靠性无法满足大型互联网服务的要求,如机房 ...

  6. linux和Windows下文本格式转换

    1.安装转换工具:sudo apt-get install tofrodos 2.开始转换:fromdos grade.sh

  7. JavaScript中的getBoundingClientRect()方法

    这个方法返回一个矩形对象,包含四个属性:left.top.right和bottom.分别表示元素各边与页面上边和左边的距离. getBoundClientRect()方法返回的对象中和CSS中所定义不 ...

  8. Server.MapPath()获取绝对路径

    1.    Server.MapPath("/")  应用程序根目录所在的位置 如 C:\Inetpub\wwwroot\ 2.Server.MapPath("./&qu ...

  9. 收集一下Windows7系统啊

    Windows7系统:http://down.662p.com/list/141_1.html   萝卜家园WIN7系统X86位旗舰特别GHOST版2014年12月 这个是萝卜家园WIN7系统X86位 ...

  10. 在ASP.NET中发送电子邮件的实例教程

    首先.导入命名空间: 代码如下 复制代码 using System.Net.Mail; 定义发送电子邮件的方法[网上很多不同的,可以对比着看一下,WinForm的也适用]: 代码如下 复制代码 /// ...