使用FormData上载的文件在服务器端变为null

时间:2015-09-04 06:36:34

标签: ajax asp.net-mvc form-data

我需要将一个文件和其他几个输入数据一起上传到ASP.NET MVC。我这样做是为了实现这个目标:

var formData=new FormData();
formData.Append("uploadedFile",$('input[type="file"]')[0].files[0]);
$.ajax({
    url: "/Test/TestFormData",
    data: formData,
    cache: false,
    contentType: false,
    processData: false,
    dataType:"json",
    type: 'POST'
});

我无法弄清楚如何在服务器端使用正确的模型绑定来处理这个问题(如果可能的话),所以我决定通过按键搜索Form:

  public class TestControler:Controller
    public void TestFormData(){
      var file=Request.Form["uploadedFile"];//file is null here
    }

当我尝试访问它时,问题是file为null。这是请求标题和有效负载:

Request

为了在服务器端获取文件,我还需要做些什么吗?

1 个答案:

答案 0 :(得分:0)

经常,@ Steve Muecke的回复帮助我找到了解决方案。虽然我没有得到我所需要的100%,但它总比没有好。我确实完成了@Stephen在this answer中提出的建议,但就我而言,它并没有帮助。对于为什么没有任何线索。所以这就是我最终的结果:

var formData=new FormData();
formData.append("uploadedFile",$('input[type="file"]')[0].files[0]);
var doc={};
doc.Subject="TestSubject";
doc.DocBody="Test body";
doc.Receiver="Someone@somewhere";
formData.append('doc',JSON.stringify(doc));


  public class TestControler:Controller
    public void TestFormData(HttpPostedFileBase uploadedFile){
      var doc=Request.Form["doc"];
    }

如您所见,我从不同的地方访问上传的文件和doc对象。参数名称必须与我们在客户端附加到formData的参数名称匹配,否则参数将为null。不知道为什么但是如果我添加另一个名为doc的参数不起作用。我的意思是它是空的,这就是我必须通过Form["doc"]访问它的原因。