使用mvc4中的form.serialize()发布包含HttpPostedFileBase文件的模型以及一些参数

时间:2014-07-30 12:50:05

标签: jquery asp.net-mvc asp.net-mvc-4

我有一个包含一些字符串和HttpPostedFileBase属性的ViewModel。 当我使用下面的ajax调用将模型发布到控制器时,

 $.ajax({
                url: '@Url.Action("_AddFeedback", "Mcq")',
                type: 'post',
                 data: $('form#frm-feedback').serialize(),
              //  data: formData,

                success: function (data) {
                    alert("done");
                },
                error: function (data) {
                    alert("Error occured while saving Option's data.");
                }
            });

我为字符串获取值,但 HttpPostedFileBase 类型属性为null。我们如何使用ajax ??

发布HttpPostedFileBase文件

1 个答案:

答案 0 :(得分:2)

不幸的是,在序列化表单时,您无法使用AJAX发送文件,但幸运的是还有另一种方法,如果您不介意使用HTML5。一个简短的例子,根据this回答:

<强>标记:

<form id="upload-form" enctype="multipart/form-data">
    <input name="file" type="file" />
    <input type="button" id="submit" value="Upload" />
</form>

<强>使用Javascript:

$('#submit').click(function (e) {
    e.preventDefault();
    var formData = new FormData($('#upload-form')[0]);
    $.ajax({
        url: '@Url.Action("_AddFeedback", "Mcq")',
        type: 'POST',
        data: formData,
        cache: false,
        contentType: false,
        processData: false
    });
});

如上所述,这是一种HTML5方法,这意味着它不一定适用于每个浏览器。如果这是一个问题,请参阅我已链接的主题以解决此问题的其他方法。