2013-06-11 6 views
8

hochladen Ich versuche, eine Datei mit Ajax.BeginForm() hochladen, aber es funktioniert nicht.nicht in der Lage, Datei mit Ajax.BeginForm() asynchron

Meine Ansicht Enthält:

@using (Ajax.BeginForm("UploadFile", null, new AjaxOptions { HttpMethod="POST",  UpdateTargetId = "result" }, new { enctype = "multipart/form-data" })) 
{   
    <label id="lblUploadNewFile" for="fileUploadControl">Upload New File&lt;/label>  
    <input type="file" name="fileToUpload" id="fileUploadControl"/> 
    <input id="btnFileUpload" type="submit" value="Upload" /> 
    <span id="result" />    
} 

und der entsprechende Controller ist:

[HttpPost] 
public string UploadFile(FormCollection formData) 
{ 
    HttpPostedFileBase file=null; 

    try 
    { 
     file = Request.Files[0]; 
    } 
    catch { } 

    if (file!=null &amp;&amp; file.ContentLength &gt; 0) 
    { 
     file.SaveAs(string.Concat(
      AppDomain.CurrentDomain.BaseDirectory, 
      Path.GetFileName(file.FileName))); 

     return &quot;Successfully Uploaded&quot;; 
    } 
    else 
    { 
     return &quot;Upload Failed, please try again.&quot;; 
    } 
} 

Das Problem ist, dass es die Datei ist das Hochladen, aber nicht mehr tun, keine asynchronen Beiträge, wenn ich jquery.unobtrusive-ajax.js entfernen. Stattdessen macht es einen vollständigen Post-Back.

Wenn ich hinzufügen jquery.unobtrusive-ajax.js in meiner Ansicht, es tut asynchron, aber nicht senden Datei in Formulardaten. In Request.Files[] wird keine Datei an den Server gesendet.

+1

Es ist nicht möglich, mit Ajax aus offensichtlichen Gründen Gefunden löst: Sie eine Seite Hut uploads auf dem Besucher-Dateisystem alle zugängliche Datei aufbauen konnte zum Server ohne es ihm zu sagen. – Robert

Antwort

14

Sie können keine Dateien mit AJAX hochladen. Dies wird nicht unterstützt. Wenn Sie das tun wollen, können Sie entweder ein Datei-Upload-Plugin wie Uploadify oder Blueimp File Upload verwenden oder das HTML 5 File API verwenden, wenn der Client-Browser es unterstützt.

+0

danke Darin für deine Antwort, ich werde versuchen Blueimp zu implementieren, da Uploadify Flash benötigt. –

+0

Ich benutze jQuery-asyncUpload freigegeben von steven: http://blog.stevensanderson.com/2008/11/24/jquery-ajax-uploader-plugin-with-progress-bar/ –

+0

@Darin Dimitrov, ich don verstehe deine Antwort nicht. Gemäß [dieser anderen StackOverflow-Frage] (http://stackoverflow.com/questions/19042116/ajax-beginform-in-mvc-to-upload-files) wird das Hochladen von Dateien tatsächlich unterstützt und die Art und Weise, dies zu tun, ist in angegeben diese andere Antwort. Können Sie bitte klarstellen, was Sie sagen? –

9

Sie können dies ohne zusätzliche Bibliotheken tun.

Ich kam in diesem kleinen Hack, das es schön

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

http://www.acnenomor.com/1762557p1/c-mvc3-ajaxbeginform-to-upload-file-not-working

+1

'http: // www.acnenomor.com/1762557p1/c-mvc3-ajaxbeginform-Upload-Datei-nicht-arbeiten" ist nicht mehr; es war eine Scraper-Site, die Stack Overflow kopierte, du hast [diesen Post] wirklich gefunden (https://stackoverflow.com/questions/14972470/c-sharp-mvc3-ajax-beginform-to-upload-file-not-working). –

+1

Wer auch immer du bist Ich werde dich finden und dich lieben! –

+0

Aber wie implementiert man den Rückruf für das Formular? –