MVC Core:通过Ajax请求上传文件并返回JSON对象,而无需重定向

时间:2018-10-09 12:19:27

标签: ajax model-view-controller file-upload .net-core

我有一个要求,我想将excel文件上传到控制器,读取文件,处理其数据,然后将其发送回与JSON对象相同的视图。

我想使用AJAX调用来实现这一点,因为我想捕获其成功回调并根据收到的响应来操作DOM。我已经尝试了一些方法,但是无法击中控制器。对此有任何帮助。

下面显示的是我的 JS HTML C#代码:

function SubmitInfo() {
    var formData = new FormData();
    formData.append('file', $('#fileInput')[0].files[0]); // myFile is the input type="file" control

    var _url = '@Url.Action("Upload", "CrossValidation")';

    $.ajax({
        url: _url,
        type: 'POST',
        data: formData,
        processData: true,  // tell jQuery not to process the data
        contentType: false,  // tell jQuery not to set contentType
        success: function (result) {
            //manipulate DOM and bind response with Kendo grid
            alert("result");
        },
        error: function (jqXHR) {
        },
        complete: function (jqXHR, status) {
        }
    });
}
<div class="col-md-4">
    <input id="fileInput" type="file">
</div>
<div class="col-md-4">
    <input type="submit" value="Upload file" onclick="SubmitInfo()"/>
</div>
public JsonResult Upload(IFormFile formData)
{
    //Do something here....
    return Json("");
}

1 个答案:

答案 0 :(得分:2)

您发布的代码中存在两个明显的问题:

  1. processData: true。通过将其设置为true(默认值),您要jQuery尝试将您提供的data变成查询字符串,这不是您想要的。相反,您要将其设置为false,这将要求jQuery将数据保留为空,并将其按原样传递给基础XMLHttpRequest,其中数据将被正确格式化为multipart / form-数据。
  2. 传递给name的{​​{1}}参数必须与ASP.NET Core MVC Controller中的formData.append参数的名称匹配。您在前者中使用IFormFile,在后者中使用file,因此您需要更改其中一个,使它们相同。