将带有HttpPostedFileBase字段的javascript对象传递给MVC控制器

时间:2015-07-23 09:20:13

标签: javascript json asp.net-mvc object httppostedfilebase

我需要将对象从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仍为空。

0 个答案:

没有答案