我需要将对象从javascript传递给MVC控制器。我是这样做的:
$.ajax({
type: 'POST',
url: '/Companies/Edit/',
dataType: 'json',
data: {
Id: id,
Name: name,
Adress: adress,
NIP: nip,
File: file
},
success: function (data) {
//...
},
error: function (xhr, ajaxOptions, error) {
alert('Błąd: ' + xhr.responseText);
}
});
我的ViewModel如下所示:
public class CompanyEditViewModel
{
public int Id { get; set; }
public string Name { get; set; }
public string Address { get; set; }
public string NIP { get; set; }
public System.Web.HttpPostedFileBase File { get; set; }
}
这样的控制器:
public ActionResult Edit(CompanyEditViewModel company) { ... }
问题是控制器中的字段File
始终为空,但Firebug显示该文件存在。所以我的问题是:如何通过字段包含文件传递javascript对象?
修改
根据here的回答:我尝试使用FormData
发送我的对象:
var formdata = new FormData(viewModel);
$.ajax({
url: '/Companies/Edit/',
type: 'POST',
data: formdata,
processData: false,
contentType: false,
});
但文件仍然为空。所以我编辑了控制器的单独文件:
public ActionResult Edit(CompanyEditViewModel company, HttpPostedFileBase dropImage) {...}
...已删除字段来自javascript viewModel
对象的文件并再次尝试使用FormData
:
var formdata = new FormData(viewModel);
formdata.append('dropImage',file);
$.ajax({
url: '/Companies/Edit/',
type: 'POST',
data: formdata,
processData: false,
contentType: false,
});
控制器中的 dropImage
仍为空。