您的位置:首页 > 其它

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

2015-10-16 10:26 399 查看
MVC5.0(or5.0↓)Ajax.BeginForm异步上传附件问题,答案是不能的!

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

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

//前台.cshtml文件

<scriptsrc="~/jquery.unobtrusive-ajax.js"></script>
@using(Ajax.BeginForm("upLoadAsync","UploadFile",
newAjaxOptions{
HttpMethod="Post",
OnSuccess="success"
  }
  ,new{enctype="multipart/form-data"}
))
{
<inputtype="file"id="fileupload"name="Upload"/>
<inputtype="submit"value="上传"id="btn">
}

//C#代码

publicstringupLoadAsync()
{
  HttpPostedFileBasefile=Request.Files["Upload"];

  HttpPostedFileBasefile=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文件

<scriptsrc="~/jquery.form.js"></script>

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

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

<scripttype="text/javascript">

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

//C#代码


publicstringupLoadAsync()
{
  HttpPostedFileBasefile=Request.Files["Upload"];


  HttpPostedFileBasefile=Request.Files[0];


  //其余代码省略


  //......


}



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

当controller返回值也可以成功进入seccess方法中。

请注意我代码中标红的位置,以防遗漏导致一直debug无果问题!

总结一下:

1、MV55.0中异步提交表单方法两种:Ajax.BeginForm(newAjaxOptions:post)和$("#formID").ajaxSubmit({})

2、MVC5.0中异步提交表单上传文件一种:$("#formID").ajaxSubmit({})
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: