2016-01-19 166 views
0

我想在MVC上傳一個文件我已經使用下面的jquery代碼來獲取控制器上的文件。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以及請禮貌。

+0

你在哪裏調用'OnUserSuccess'?什麼時候該被調用? –

+0

它在Ajax.begin窗體() 「@using(Ajax.BeginForm(」DocEdit「,」User「,new {EditUserID = ViewBag.EditUserID},new AjaxOptions(){HttpMethod =」POST「,UpdateTargetId =」 UserPartialdiv「,OnSuccess =」OnUserSuccess「},新{enctype =」multipart/form-data「,@class =」form-sm「}))」 –

+0

這裏有幾件事你需要注意** 1。**創建jQuery庫以簡化vanilla JavaScript語法,因此,除非真正需要,否則不要使用vanilla JS語法。 ** 2。** jQuery庫爲ajax功能提供簡單而有效的方法,http://api.jquery.com/jQuery.ajax/。同樣適用於事件處理,http://api.jquery.com/submit/。所以使用這些。 ** 3。**我沒有看到腳本中的任何「OnUserSuccess」參考文件 – dreamweiver

回答

1

既然你已經覆蓋MVC Ajax和JavaScript中submit功能提交,你可以嘗試調用方法在你的成功再打這樣

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() 
          } 
        } 
+0

是的,我錯過了這個謝謝你,所以你保存我的一天先生;) –

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"); 
} 

這是需要上傳的基本要求。