Telerik "Загрузить" элемент управления в MVC Core: загрузить файл дважды, в ajax и с окончательной кнопкой отправки POST - PullRequest
0 голосов
/ 31 января 2020

У меня есть элемент управления Telerik File Upload, настроенный для асинхронной загрузки файла в Ajax:

@(Html.Kendo().Upload()
    .Name("fileUpload")
    .Multiple(false)
    .Async(a => a
        .Save("AnalyzeFile", "Request")
        .AutoUpload(true)
    )
    .Events(e => e.Success("onUploadOperationSuccess"))
    .Validation(validation => validation.AllowedExtensions(new[] { ".csv" }))
    .HtmlAttributes(new { style = "width:100%" }))

И для выполнения некоторых операций на основе ответа сервера в обработчике "onUploadOperationSuccess", чтобы показать Предварительный просмотр структуры файла для моего пользователя и позволяет ему выбрать несколько вариантов. Эта часть отлично работает.

Когда он это сделает, он выполнит настоящий «POST» для всей формы с помощью кнопки «Отправить». Моя проблема в том, что я хотел бы также загрузить файл в это время и иметь возможность получить его в коде Action, непосредственно со свойством Model или в объекте Request.

Форма определяется как эта :

@using (Html.BeginForm("Save", "Request", FormMethod.Post, new { @class = "form-horizontal", id = "requestForm", enctype="multipart/form-data" }))
{
    ...
    <button id="finalSubmit" type="submit" class="k-button k-primary">Valider</button>
}

Проблема в том, что файл не загружается при отправке, только в Ajax. Я знаю, что это не проблема на стороне сервера, потому что в самом браузере я не вижу ничего, связанного с файлом в полезной нагрузке submit POST. Вероятно, из-за конфигурации Ajax элемента управления Telerik.

Конечно, я мог бы сохранить файл где-нибудь на сервере при первой загрузке (ajax), но так как он будет связан с некоторыми данными которые еще нигде не сохранены и которые я не хочу создавать на этом этапе, это не очень удобное решение.

Есть ли способ разместить файл на обоих POST (ajax + submit кнопка)?

Спасибо

Обновление: Я также писал на форуме Telerik , они ответили мне, что это невозможно. Они также перенаправили меня на { ссылка }, но это не решает первоначальный вопрос. Я поделюсь своим собственным решением ниже, как только оно будет реализовано.

...