2016-01-19 2 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 Form() «@using (Ajax.BeginForm (« DocEdit »,« Пользователь », новый {EditUserID = ViewBag.EditUserID}, новый AjaxOptions() {HttpMethod =" POST ", UpdateTargetId =" UserPartialdiv ", OnSuccess =" OnUserSuccess "}, new {enctype =" multipart/form-data ", @class =" form-sm "}))" –

+0

Здесь нужно отметить несколько вещей ** 1. ** Библиотека jQuery была создана для упрощения синтаксиса javascript ванили, поэтому не используйте синтаксис синтаксиса Vanilla, если это действительно необходимо. ** 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(); 

и отправьте 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"); 
} 

этого с помощью Ajax вызова является основным требованием, необходимым для загрузки.

Смежные вопросы