2017-07-09 4 views
0

J'essaie de passer deux paramètres sur un appel ajax. J'ai déjà essayé plusieurs méthodes suggérées sur StakeOverflow mais aucune n'a fonctionné. Voici ma signature de la méthode sur le contrôleur:Plusieurs paramètres sur jquery ajax call asp.net

[HttpPost] 
public ActionResult UploadFile(HttpPostedFileBase[] files, string[] usersToShare) 

Voici ma fonction:

function uploadFile() { 
     var formData = new FormData(); 
     var totalFiles = document.getElementById("files").files.length; 

     for (var i = 0; i < totalFiles; i++) { 
      var file = document.getElementById("files").files[i]; 
      formData.append("files", file); 
     } 

     //get the selected usernames (email) to share the file 
     var selectedUsers = []; 
     $("#costumerUsersListSelect :selected").each(function() { 
      selectedUsers.push($(this).val()); 
     }); 

     $.ajax({ 
      type: 'post', 
      url: '/ManageFiles/UploadFile', 
      data: "files=" + formData + "usersToShare=" + selectedUsers, 
      dataType: 'json', 
      contentType: false, 
      processData: false, 
      success: function (data) {      
      }, 
      error: function (error) {     
      } 
     }); 
    } 

Je veux passer au contrôleur du formData et les selectedUsers. Si je passe juste le formData (Data: formData) tout fonctionne mais je dois aussi passer les selectedUsers.

Voici ce que je l'ai déjà essayé sans succès:

data: JSON.stringify({ files: formData, usersToShare: selectedUsers }), 
data: { files: formData, usersToShare: JSON.stringify(selectedUsers)}, 
data: "files=" + formData + "&usersToShare=" + selectedUsers, 
data: "files=" + formData + "usersToShare=" + selectedUsers, 

Je ne sais pas si cela est un problème de syntaxe.

Merci d'avance pour toute aide.

+0

dans votre code derrière dans le dossier de modèle créer un objet à la demande et d'utiliser son –

Répondre

0

Au lieu de:

data: "files=" + formData + "usersToShare=" + selectedUsers, 

Ajoutez le selectedUsers à formData et envoyer uniquement formData au serveur comme:

data: formData, 

et essayez à nouveau.

+0

Merci beaucoup, cela a fonctionné. – myusername21

0

Vous devez utiliser des clés différentes pour chaque valeur que vous ajoutez à formData, puis simplement ajouter les fichiers et les utilisateurs de la même manière

function uploadFile() { 
    var formData = new FormData(); 
    var allFiles = $("#files").get(0).files; 

    for (var i = 0; i < allFiles.length; i++) { 
    formData.append("files_" + i, allFiles[i]); 
    } 

    $("#costumerUsersListSelect :selected").each(function(_,i) { 
    formData.append('user_' + i, this.value); 
    }); 

    $.ajax({ 
    type: 'post', 
    url: '/ManageFiles/UploadFile', 
    data: formData, 
    dataType: 'json', 
    contentType: false, 
    processData: false, 
    success: function(data) {}, 
    error: function(error) {} 
    }); 
} 
+0

Merci, vous m'a sauvé! – myusername21