2016-04-03 10 views
0

これに問題があります。私は、コントローラに文字列変数の値とともにCSVファイルを送る必要があります。MVC6 - Ajaxを使用してCSVファイルと文字列をコントローラにアップロード

フォームの送信ボタン(送信のみ)でファイルを送信できました。また、文字列変数をコントローラに送信することもできました(これはajax投稿を使用しています)。動いていない。

このフォーラムでは、ファイルのダウンロード/アップロード(すべてのファイルタイプ)を検索していますが、この時点では私が探していたものは見つかりませんでした。私が一番近かったのはthisです。

これはCSHTML形式である:ここでは

<form asp-action="FileIndexView" 
     asp-controller="SuburbsAndPostcodesAdmin" 
     method="post" 
     enctype="multipart/form-data"> 
    <div class="form-horizontal"> 
     <div class="form-group"> 
      <label class="col-md-4 control-label">Select the Suburbs and Postcodes latest CSV File:</label> 
      <input type="file" 
        name="CSVFile" 
        id="txtFileUpload" 
        class="col-md-8 control-label" /> 
     </div> 
     <div class="form-group"> 
      <input type="submit" 
        name="Submit" 
        value="Submit" 
        class="col-md-1 btn btn-primary" 
        disabled="disabled" 
        id="SubmitFile" /> 
     </div> 
    </div> 
</form> 

はjavascriptのです:

[HttpPost] 
public IActionResult FileIndexView(IFormFile file, string connId) 
{ 
...stuff 
} 

そのMVC6ので、私はIFormFileを使用しています:

//On button click send the connection id back to method FileIndexView. 
$('#SubmitFile').click(function (e) { 
    e.preventDefault(); // <------------------ stop default behaviour of button 

    var fileUpload = document.getElementById("txtFileUpload"); 
    var url = "/SuburbsAndPostcodesAdmin/FileIndexView"; 
    var connId = $.connection.hub.id; 

    //$.post(url, {"fileUpload": file, "connId": connId }); 

    $.ajax({ 
     type: "POST", 
     url: url, 
     data: { file: file, "connId": connId }, 
     processData: false, 
     contentType: false, 
     success: function (result) { 
      alert('Yay! It worked!'); 
     }, 
     error: function (result) { 
      alert('Oh no :('); 
     } 
    }); 

}); 

、ここではIActionResultはコントローラです。

ファイルのIDの内容を変数に入れようとしましたが、失われてしまいました...私も$ .postを使ってみました。文字列変数のみを送信すればコントローラに戻ることができます。

私はファイルを送信しようとしましたが、IFormFileの引数と文字列の引数を持つコントローラがAjaxの投稿を受け付けるようにする方法を教えてください。

答えて

0

FormDataオブジェクトを使用してファイル+文字列を投稿しようとしましたか?

var fd = new FormData();  
fd.append('file', connId); 
fd.append('connId', input.files[0]); 

$.ajax({ 
     type: "POST", 
     url: url, 
     data: fd, 
     processData: false, 
     contentType: false, 
     success: function (result) { 
      alert('Yay! It worked!'); 
     }, 
     error: function (result) { 
      alert('Oh no :('); 
     } 
}); 
+0

[HttPost] IActionResultはどのように見えますか?私はリターンを管理するビューモデルを作りますか? – si2030

+0

FormDataのブラウザサポートは、IE 10から始まります。しかし、通常のHTTPリクエストを使用してフォームを送信できるので、フォールバックソリューションは簡単に提供する必要があります。 –

関連する問題