2016-05-25 10 views
-1

Ich versuche, einfach einen Benutzer eine Datei hochladen zu ermöglichen.MVC5-Controller nicht Datei von HTML-Dateieingabe

Ich habe eine einfache Form beginnen, die eine Datei-Element enthält, wie unten dargestellt:

@using (Html.BeginForm("LoadData", "Input", FormMethod.Post, new { enctype = "multipart/form-data" })) 
     { 
      <div style="width:23%; display:inline-block;"> 
       <label>Select Type:</label> 
       <select name="UploadType"> 
        <option value="First">First</option> 
        <option value="Second">Second</option> 
       </select> 
      </div> 
      <div style="width:43%; display:inline-block;"> 
       <input type="file" name="files1" id="files1" /> 
      </div> 
      <div style="width:33%; display:inline-block;"> 
       <input type="submit" value="Upload"/> 
      </div> 
     } 

Der Controller ist:

[HttpPost] 
    public ActionResult LoadData(string UploadType, HttpPostedFileBase file1) 
    { 
     if(file1 != null && UploadType != null) 
     { 
      Console.WriteLine(file1.FileName); 
      Console.WriteLine(UploadType); 
     } 
    } 

Alles Displays und arbeitet auf der Website, aber wenn es die Pfosten zurück Datei ist null. Ich habe einschließlich bei vielen Google-Ergebnissen sieht:

Binding HttpPostedFileBase using Ajax.BeginForm

MVC 4 Razor File Upload

http://www.aurigma.com/upload-suite/developers/aspnet-mvc/how-to-upload-files-in-aspnet-mvc

und vieles mehr. Sie sagen alle, dass meine Sachen korrekt sind. Solange die Namen auf der Dateieingabe und dem Controller-Parameter übereinstimmen, sollte es funktionieren. Aber es ist nicht.

Ich habe versucht, es zu benennen Datei, Dateien und jetzt file1 aber kein mater, wie ich es nenne, kommt es wieder Null.

Was mache ich falsch? Ich habe sogar versucht, die Request.Files zu überprüfen, aber das heißt, es hat eine Zählung von 0.

+0

Ich sehe nicht, wie dies abgelehnt wird. Das Problem wurde nie gelöst, nur herum gearbeitet. Daher ist ein Downvote ohne Grund unnötig, besonders wenn die einzige Antwort nicht funktioniert. Wenn Sie eine Antwort haben, würde ich es gerne hören. –

Antwort

0

Wow das ist jetzt alt und keine richtige Antwort wurde sogar gegeben (down vote for what?).

Ich habe eine funktionierende Antwort zu diesem Thema gefunden.

Für alle, die auf dieses Problem stoßen, ist Javascript Ihr Freund.

Ich endete mit Javascript, um die Dateien stattdessen zu behandeln. Hier ist der Arbeitscode:

Javascript (es mehrere Dateien jetzt erlaubt):

function SendData() { 
     var formData = new FormData(document.querySelector('UploadForm')); 
     for(var i = 0; i < $('#file')[0].files.length; i++) 
     { 
      formData.append('files', $('#file')[0].files[i]); 
     } 

     formData.append('samplevalue', $('#samplevalue').val()); 

     var url = $('#baseUrl').val() + 'Input/LoadData'; 
     $.ajax({ 
      url: url, 
      type: 'POST', 
      data: formData, 
      processData: false, // tell jQuery not to process the data 
      contentType: false, // tell jQuery not to set contentType 
      success: function (data) { 
      // your logic.... 
      }, 
      error: function(data) 
      { 
       // logic.... 
      } 
     }); 
    } 

Der Controller übernimmt

public string LoadData(string samplevalue, HttpPostedFileBase[] files) 
{ 
} 

Natürlich ist der Trick der Javascript ist. Ich weiß immer noch nicht, warum das Formular nicht normal funktioniert, aber das funktioniert perfekt. :)

-1

Ihre Dateieingabe heißt files1, aber Ihre Aktionsparameter ist file1 (keine s).

+0

Entschuldigung. Aktualisiert und wird immer noch nicht funktionieren. Wie bereits erwähnt, wird der Name niemals die Datei erhalten. –

+1

Da ist wirklich nicht viel dabei. Angenommen, Ihr gerenderter 'form'-Tag enthält tatsächlich 'enctype =" multipart/form-data "' (überprüfen Sie in der Dokumentquelle), und der Feldname stimmt * genau * mit einem Parameternamen für Ihre Aktion überein, dann sind Sie golden. –

+0

Gibt an, was die Seite in ihrer Seitenquelle sagt, wenn sie gerendert wird. –

Verwandte Themen