2015-09-04 61 views
0

我需要使用Ajax将其他几个输入数据连同上传到ASP.NET MVC。我做了以下来实现:使用FormData上传的文件在服务器端变为空

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' 
}); 

我无法弄清楚如何处理这种与适当的模型绑定的服务器端(如果这是以往任何时候都可以),所以我决定通过键搜索表格去:

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

问题是file当我尝试访问它时为空。这里的请求头和有效载荷:

Request

有什么额外的我必须做的就是在服务器端的文件?

+0

从这个[link](http://www.ajaxf1.com/tutorial/ajax-file-upload-tutorial.html#) – Lali

+0

获取帮助不幸的是,您提供的链接中的人使用iFrame来达到此目的。除了它是PHP。 –

+0

它只是简单地包含参数在您的POST方法 - 公共ActionResult TestFormData(HttpPostedFileBase uploadedFile)',如果你有一个窗体,那么你可以使用'var formdata = new FormData($('form')。get 0));'这将序列化窗体和任何文件输入(参考[这个答案](http://stackoverflow.com/questions/29293637/how-to-append-whole-set-of-model-to-formdata -and-obtain-it-in-mvc/29293681#29293681)) - 尽管你的行为似乎没问题 –

回答

0

@Stephen 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="[email protected]"; 
formData.append('doc',JSON.stringify(doc)); 


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

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

相关问题