Не удается получить обратный вызов из метода HTTP в контроллере - PullRequest
0 голосов
/ 01 мая 2018

Я занят созданием индикатора ожидания для загрузки файлов, но мне кажется, что я не могу получить обратный вызов от метода POST, который запускается в контроллере. Я искал полдня и перепробовал множество разных решений, но ни одно из них не помогло в моем случае.

У меня есть модель:

public class FileUploadModel
{
    [Required(ErrorMessage = "Select file(s) to upload.")]
    [Display(Name = "Browse")]
    public HttpPostedFileBase[] Files { get; set; }

    [Display(Name = "File Type")]
    public EFileType FileType{ get; set; }
}

У меня есть форма:

@using (Html.BeginForm("FileExchange", "General", FormMethod.Post, new { enctype = "multipart/form-data", id = "uploadform" }))

Метод в контроллере:

[HttpPost]
public async Task<ActionResult> FileExchange(FileUploadModel model)
{
    await UploadFiles(model);
    return View("FileExchange");
}

И я попробовал что-то вроде следующего в javascript / ajax:

<script>
    $(document).ready(function () {
        $("#preloader").hide(); //the wait indicator
        $('#uploadform').on('submit', function (e) {
            e.preventDefault();

            var formdata = new FormData($('#uploadform').get(0));

            $("#preloader").show();

            var url = '@Url.Content("~/General/FileExchange/")'
            //var dataModel = $(this).serialize();
            $.ajax({
                url: url,
                type: "POST",
                data: formdata,
                processData: false,
                contentType: false,
                //dataType: "json",
                success: function (resp) {
                    $("#preloader").hide();
                },
                error: function (resp) {
                    $("#preloader").hide();
                }
            });
        });
    })
</script>

Индикатор ожидания работает, НО метод не срабатывает.

Когда я добавляю модель в функцию «отправить»:

$('#uploadform').on('submit', model, function (e)

метод POST срабатывает, но индикатор ожидания перестал работать. Похоже, функция on submit больше не срабатывает.

Есть идеи, как решить эту проблему?

1 Ответ

0 голосов
/ 01 мая 2018

Я искал немного дольше и нашел решение своей проблемы:

<script type="text/javascript">
    $(document).ready(function () {
        $("#preloader").hide();
    })

    $('#uploadform').on('submit', function () {

        $("#preloader").show();

        $('#uploadform').ajaxForm({
            url: '@Url.Content("~/General/FileExchange")',
            dataType: 'json',
            success: function () {
                $("#preloader").hide();
            }
        })
    })
</script>

Таким образом, я могу показать индикатор при срабатывании on 'submit' и скрыть индикатор, когда метод POST с заданного URL успешно выполнен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...