在ASP MVC 5中使用AJAX时,HttpPostedFileBase为null

时间:2015-10-05 16:24:58

标签: javascript jquery ajax asp.net-mvc

我正在使用JQuery.AJAX将文件上传到ASP.NET MVC 5中的服务器。 我的观点代码是:

<input type="file" size="45" name="file" id="file">

Javascript是:

<script>
$('#file').on("change", function () {
    var formdata = new FormData($('form').get(0));
    CallService(formdata);
});
function CallService(file) {
    $.ajax({
        url: '@Url.Action("Index", "Home")',
        type: 'POST',
        data: file,
        cache: false,
        success: function (color) {
            ;
        },
        error: function () {
            alert('Error occured');
        }
    }); 
}

最后是HomeController.cs的代码:

        public ActionResult Index (HttpPostedFileBase file)
    {
       ...

    }

但每次调用Index操作时,HttpPostedFileBase对象都为空。 我已经在SO中阅读了有关此问题的所有主题,但未找到答案。我输入了正确的名称,它与控制器中的参数名称相符。代码有什么问题,所以对象总是空的?

1 个答案:

答案 0 :(得分:2)

这个问题的正确代码: 视图:

<form>
    <input type="file" size="45" name="file" id="file">
</form>

Javascript:

<script>
    $('#file').on("change", function () {
        var formdata = new FormData($('form').get(0));
        CallService(formdata);
    });

    function CallService(file) {
        $.ajax({
            url: '@Url.Action("Index", "Home")',
            type: 'POST',
            data: file,
            cache: false,
            processData: false,
            contentType: false,
            success: function (color) {
                ;
            },
            error: function () {
                alert('Error occured');
            }
        });
    }
</script>

最后是HomeController.cs的代码:

public ActionResult Index (HttpPostedFileBase file)
{
   ...
}