Jquery代码没有执行

时间:2016-01-19 06:53:02

标签: jquery asp.net-mvc

我正在尝试在MVC中上传文件我使用了以下jquery代码来获取控制器上的文件。

 $(document).ready(function () {
        window.addEventListener("submit", function (e) {
            var form = e.target;
            if (form.getAttribute("enctype") === "multipart/form-data") {
                if (form.dataset.ajax) {
                    e.preventDefault();
                    e.stopImmediatePropagation();
                    var xhr = new XMLHttpRequest();
                    xhr.open(form.method, form.action);
                    xhr.onreadystatechange = function () {
                        if (xhr.readyState == 4 && xhr.status == 200) {
                            if (form.dataset.ajaxUpdate) {
                                var updateTarget = document.querySelector(form.dataset.ajaxUpdate);
                                if (updateTarget) {
                                    updateTarget.innerHTML = xhr.responseText;
                                }
                            }
                        }
                    };
                    xhr.send(new FormData(form));
                }
            }
        }, true);
    });

我从here

获取了此脚本

它的工作文件,但是当我想运行一些其他jquery脚本时,不会在这里触发代码。

function OnUserSuccess() {
        if ($("#UserDocumentID").val() == 0) {
            mvcNotify.displayMessage("Record saved successfully.", "success");
        } else {
            mvcNotify.displayMessage("Record updated successfully.", "success");
        }
    }

我在Ajax.begin Form()

中称呼它
@using (Ajax.BeginForm("DocEdit", "User", new { EditUserID = ViewBag.EditUserID }, new AjaxOptions() { HttpMethod = "POST", UpdateTargetId = "UserPartialdiv", OnSuccess = "OnUserSuccess" }, new { enctype = "multipart/form-data", @class = "form-sm" }))

我不太了解jquery和mvc的新手也请礼貌。

2 个答案:

答案 0 :(得分:1)

由于您已使用javascript submit函数覆盖了MVC Ajax提交,因此您可以尝试在此成功回调中调用该方法

if (xhr.readyState == 4 && xhr.status == 200) {
                            if (form.dataset.ajaxUpdate) {
                                var updateTarget = document.querySelector(form.dataset.ajaxUpdate);
                                if (updateTarget) {
                                    updateTarget.innerHTML = xhr.responseText;
                                }

                              //Call your method here
                              OnUserSuccess()
                          }
                    }

答案 1 :(得分:0)

在JQuery函数中,使用

var file = new File();

在此之后,您必须拥有上传按钮,在其上点击事件,获取文件。

var fileDate = $('#textboxId').value();

并通过ajax调用将此fileData发送到控制器

$.ajax(type: "POST",
       url: '\YourController\yourFunctionName',,
       data: { yourParameterNameInControllerFunction : fileData },
       success: function() { alert('Success'); },
       error: function() {alert('Error')});

您的控制器应如下所示

[HttpPost]
public ActionResult functionName(HttpPostedFileBase file) {

 if (file.ContentLength > 0) {
 var fileName = Path.GetFileName(file.FileName);
 var path = Path.Combine(Server.MapPath("~/giveyourdirectory"), fileName);
 file.SaveAs(path);
}

 return RedirectToAction("functionName");
}

这是上传所需的基本要求。