Как вызвать javascript после загрузки файла через kendo.upload и форму в MVC?

Я пытаюсь отправить форму, одним из свойств которой является список файлов.

После успешного завершения ActionResult мне нужно показать сообщение об успешном выполнении, которое должно быть запущено с помощью Javascript.

Если я использую форму Ajax.Begin, отображается сообщение javascript, но файлы не отправляются в ActionResult, с другой стороны, если я использую Html.BeginForm файлы отправлены, но я не могу вызвать функцию javascript и, следовательно, не могу вызвать сообщение об успешном выполнении.

вот мой взгляд:

@using (Html.BeginForm("Action", "Controller", FormMethod.Post, 
        new { id = "exceptionForm", enctype = "multipart/form-data" }))
{
   @Html.TextAreaFor(m => m.Notes)
   @(Html.Kendo().Upload()
   .Name("EventFiles")
   )
   <div >
      <button href="#">
      submit
      </button>
   </div>
}

Мои действия

[HttpPost]
public ActionResult Action(Model model)
{
   //do something
   result = new BaseJsonData();
   result.HasCompletedSuccessfully = true;
   return this.Json(result);
}

Моя модель

public class EventModel
{
   public string Notes { get; set; }
   public IEnumerable<HttpPostedFileBase> EventFiles { get; set; }
}

Мой javascript:

onSuccess: function (data) {
     if (data.HasCompletedSuccessfully) {
      //show message extention
     }
}

Заранее спасибо :)

Шьюнс


person Schewns    schedule 23.04.2015    source источник
comment
попробуйте добавить событие в объявление @(Html.Kendo().Upload().Name('EventFiles')).Events(onComplete) и создайте функцию для onComplete в javascript, которая будет вызываться после завершения загрузки   -  person Sushil    schedule 23.04.2015


Ответы (2)


Вам нужно будет напрямую использовать асинхронный режим элемента управления Telerik:

.CSHTML

@(Html.Kendo().Upload()
            .Name("files")
            .Async(a => a
                .Save("Save", "Upload")
                .Remove("Remove", "Upload")
                .AutoUpload(true)
            )
            .Events(events => events
                .Success("onSuccess")
                .Error("onError")
            )
        )

Javascript:

<script>
    function onSuccess(e) {
        alert("Success (" + e.operation + ")");
    }

    function onError(e) {
        alert("Error (" + e.operation + ")");
    }      
</script>

Более подробная информация доступна в документации Telerik:

person David Tansey    schedule 23.04.2015
comment
дело в том, что я просто хочу отправить свою форму после того, как нажму «Отправить», например, она будет отправляться каждый раз, когда я загружаю форму :), я опубликую ответ сейчас, я понял - person Schewns; 23.04.2015

После некоторого копания и пробы некоторых подходов я выбрал это решение:

Я скачал этот плагин:

http://jquery.malsup.com/form/#download

После установки я добавил эту функцию javascript:

$('#exceptionForm').ajaxForm({
  complete: function (response) {
    var data = response.responseJSON;
    if (data.HasCompletedSuccessfully) {
            //warning message
    }
})

И это сработало как шарм. Спасибо за помощь :)

person Schewns    schedule 23.04.2015