【问题标题】:Asp.NET MVC 4 Ajax Request Cancels on SubmitAsp.NET MVC 4 Ajax 请求在提交时取消
【发布时间】:2015-06-15 08:44:07
【问题描述】:

问题在于 Ajax 请求取消
在我从表单提交调用 ProcessMessage 后,我遇到了问题

提交页面的问题是取消我的 ajax 请求,所以我收到错误.. 请帮我解决这个问题

查看

@using (Html.BeginForm("Index", "Home", FormMethod.Post, new { id = "formUpload", enctype = "multipart/form-data" }))
{
    <div>
        <b>Upload File</b>

        <input type="file" name="file" />
        <input type="submit" value="Upload File" name="btnUpload" onclick="progressStatus();"/><br />

    </div>

    <div>
        @ViewBag.Message
    </div>

    <div style="width: 30%; margin: 0 auto;">

        <div id="progressbar" style="width: 300px; height: 15px"></div>
        <br/>
    </div>

}
@Scripts.Render("~/bundles/jquery")

<script type="text/javascript">
    function progressStatus() {

        var oReq = new XMLHttpRequest();
        oReq.open("get", "/Home/ProcessMessage", true);
        oReq.send();
        setInterval(showResult, 1000);

        function showResult() {
            var result = "";
            if (result !== oReq.responseText) {
                result = oReq.responseText;
                debugger;
                $("#progressbar").html(result);
            }
        }

        return false;
    }

</script>

控制器

    [HttpPost]
            public ActionResult Index(HttpPostedFileBase file)
            {
                if (file != null)
                {
                    var fname = Path.GetFileName(file.FileName);

                    var exis = Path.Combine(System.Web.HttpContext.Current.Server.MapPath("~/Storage/uploads"), fname);
                    if (System.IO.File.Exists(exis))
                    {
                        ViewData["Message"] = "The file " + fname + " has already exists";
                    }
                    else
                    {
                       try
                       {
                            if (file.ContentLength > 0)
                            {
                                var fileName = Path.GetFileName(file.FileName);
                                var folderPath = Server.MapPath("~/Storage/uploads");
                                fname = fileName;
                                var path = Path.Combine(folderPath, fileName);

                                var filebytes = new byte[file.ContentLength];

                                if (!Directory.Exists(folderPath))
                                    Directory.CreateDirectory(folderPath);

                                file.SaveAs(path);

                            }
                            ViewData["Message"] = "The file " + fname + " has uploaded successully";
                       }
                       catch (Exception e)
                       {
                            ViewData["Message"] = "The file " + fname + " Could not upload";
                          ViewData["Message"] = e.Message;
                        }
                    }
                }
                else
                    ViewData["Message"] = "Please choose file";
                    return View();
            }

public class ProgressiveResult : ActionResult
{
    public override void ExecuteResult(ControllerContext context)
    {
        for (int i = 0; i < 20; i++)
        {
            context.HttpContext.Response.Write(i.ToString());
            Thread.Sleep(2000);
            context.HttpContext.Response.Flush();
        }
        context.HttpContext.Response.End();
    }
}
and this is an action that returns this result:

public ActionResult ProcessMessage()
{
   return new ProgressiveResult();
}

【问题讨论】:

  • 到底是什么错误?

标签: c# asp.net ajax asp.net-mvc-4 asp.net-ajax


【解决方案1】:

您必须在单击事件处理程序中返回 false 才能取消提交表单:

<input type="submit" value="Upload File" name="btnUpload" onclick="progressStatus(); return false;"/>

【讨论】:

  • 您必须将 Index 的代码放入您的 ajax 调用的操作方法中。正如您可能猜到的,您必须将文件处理代码放在 ProgressiveActionResult.ExecuteResult 中并在那里返回您的进度状态。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-22
  • 1970-01-01
  • 2015-04-20
相关资源
最近更新 更多