0

我正在尝试提交一个表单,其中一个属性是文件列表。

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
     }
}

提前致谢 :)

席恩斯

4

2 回答 2

0

您必须直接使用 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 文档中提供了更多信息:

于 2015-04-23T16:28:17.207 回答
0

经过一些挖掘和尝试一些方法后,我选择了这个解决方案:

我下载了这个插件:

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

安装后,我添加了这个javascript函数:

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

它就像一个魅力。谢谢您的帮助 :)

于 2015-04-23T17:02:53.277 回答