MVC Core: выгрузить файл через Ajax-запрос и вернуть объект JSON без перенаправления - PullRequest
0 голосов
/ 09 октября 2018

У меня есть требование, когда я хочу загрузить файл 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 голосов
/ 09 октября 2018

В опубликованном вами коде есть две очевидные проблемы:

  1. processData: true.Установив для этого значение true (по умолчанию), вы просите jQuery попытаться превратить предоставляемый вами data в строку запроса, а это не то, что вам нужно.Вместо этого вы хотите установить это значение на false, что будет требовать от jQuery оставить данные в покое и передать их базовому XMLHttpRequest как есть, где данные будут правильно отформатированы как multipart / form-data.
  2. Аргумент name, передаваемый formData.append, должен совпадать с именем вашего параметра IFormFile в контроллере ASP.NET Core MVC.Вы используете file в первом и formData во втором, поэтому вам нужно изменить один из них, чтобы они были одинаковыми.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...