我有一個ASP.NET MVC 5應用程序。我試圖用模型數據發送POST請求,並且還包括用戶選擇的文件。 這是我的視圖模型(爲了清楚而簡化):如何在MVC 5中的單個Ajax POST請求中發送ViewModel和文件?
public class Model
{
public string Text { get; set; }
public long Id { get; set; }
}
這裏是控制器的操作:
[HttpPost]
public ActionResult UploadFile(long userId, Model model)
{
foreach (string file in Request.Files)
{
// process files
}
return View("Index");
}
HTML輸入元件:
<div>
<input type="file" name="UploadFile" id="txtUploadFile" />
</div>
和JavaScript代碼:
$('#txtUploadFile').on('change', function (e) {
var data = new FormData();
for (var x = 0; x < files.length; x++) {
data.append("file" + x, files[x]);
}
data.append("userId", 1);
data.append("model", JSON.stringify({ Text: 'test text', Id: 3 }));
$.ajax({
type: "POST",
url: '/Home/UploadFile',
contentType: false,
processData: false,
data: data,
success: function (result) { },
error: function (xhr, status, p3, p4) { }
});
});
問題是,當請求達到控制器操作時,我填充了文件和'userId',但'模型'參數始終爲空。填充FormData對象時我做錯了什麼?
W¯¯什麼ith contentType:「application/json」它不會發送文件。 –
參考[這個答案](http://stackoverflow.com/questions/29293637/how-to-append-whole-set-of-model-to-formdata-and-obtain-it-in-mvc/29293681#29293681 ) - 而不是'data.append(「model」,JSON.stringify({Text:'test text',Id:3}));'它應該是'data.append(Text,'test text'); data.append(Id,3);' –
謝謝,現在我看到了FormData的問題! –