2015-09-04 557 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"]訪問它。