2017-06-15 1 views
-1
objet IFormFile de

J'ai un mécanisme de téléchargement qui ressemble à ce que dans la vue:Impossible d'obtenir/définir un tag de vue

<div method="post" enctype="multipart/form-data"> 
     <input type="hidden" id="ProjectId" name="ProjectId" value="@Model.ProjectId"/> 
     <input type="hidden" id="Name" name="Name" value= "" /> 
     <input type="hidden" id="Id" name="Id" value="" /> 
     <div class="col-md-10"> 
      <div class="form-group"> 
       <input type="file" asp-for="InputFile" value="test" name="inputfile" onchange="ChooseInputFileButtonChanged(this);" id="ChooseInputFile"/> 
       <input type="submit" value="Upload" id="UploadInputFileButton" onclick="UploadInstallIntructions();"/> 
      </div> 
     </div> 
    </div> 

C'est ma méthode uploadinstructions(), qui est appelée lorsque l'utilisateur appuie sur le Bouton 'Upload' Il s'agit donc d'un simple appel ajax qui appelle une méthode sur mon contrôleur avec les arguments spécifiés. Il s'agit d'un simple appel ajax. Mon problème est que le dernier argument qui devrait être les données de fichier, de type IFormFile, afin que je puisse travailler avec lui dans mon contrôleur, ne soit pas défini. Existe-t-il une meilleure façon de lier mon objet IFormFile dans ma vue? Normalement juste la ligne:

input type="file" asp-for="InputFile" value="test" name="inputfile" onchange="ChooseInputFileButtonChanged(this);" id="ChooseInputFile"/> 

aurait dû travailler pour lier le IFormFile.

Éditer: Ce n'est pas un doublon de how to append whole set of model to formdata and obtain it in MVC, parce que ma question ne portait pas sur la liaison avec FormData, mais IFormFile n'est pas automatiquement créé à partir de la vue.

+0

Vous devez utiliser 'FormData' pour publier un fichier en utilisant ajax et définir les bonnes ajax. Reportez-vous à [cette réponse] (http://stackoverflow.com/questions/29293637/how-to-append-whole-set-of-model-to-formdata-and-obtain-it-in-mvc/29293681#29293681) –

+0

@StephenMuecke J'ai essayé votre solution et j'ai récupéré un modèle, mais tout est nul ou nul. Le code de vue montré ici est également dans une vue partielle, si cela aide à expliquer ce comportement. La méthode UploadInstructions est dans la vue parente, mais c'est comme cela qu'elle serait. Donc je n'ai toujours pas le IFormFile. –

+0

Ensuite, vous ne l'avez pas fait correctement :) –

Répondre

0

Essayez ci-dessous le code:

<form name="UpdateInstall" id="UpdateInstall" method="post" enctype="multipart/form-data"> 
     <input type="hidden" id="ProjectId" name="ProjectId" value="@Model.ProjectId"/> 
     <input type="hidden" id="Name" name="Name" value= "" /> 
     <input type="hidden" id="Id" name="Id" value="" /> 
     <div class="col-md-10"> 
      <div class="form-group"> 
       <input type="file" asp-for="InputFile" value="test" name="inputfile" onchange="ChooseInputFileButtonChanged(this);" id="ChooseInputFile"/> 
       <input type="submit" value="Upload" id="UploadInputFileButton" onclick="UploadInstallIntructions();"/> 
      </div> 
     </div> 
    </form> 

     <script> 
      function UploadInstallIntructions() { 
       var formData = new FormData($("#UpdateInstall")[0]); 
       $.ajax({ 
        type: "POST", 
        url: '@Url.Action("UploadInputFile", "SoftwareVersion")', 
        data: formData, 
        processData: false, 
        contentType: false, 
        success: function (response) { 
         window.location.href = response; 
        } 
       }); 
       return data; 
      } 
     </script> 
0

Une fois que je l'ai fait télécharger un fichier image comme celui-ci ..

$('input[type="file"]').ajaxfileupload({ 
 
    'action': 'uploadFile.jsp', 
 
    'cache': false, 
 
    'onComplete': function(response) { 
 
     $('#upload').hide(); 
 
     BootstrapDialog.show({ 
 
      title: 'Alert!', 
 
      message: 'Image Upload Successfully', 
 
      buttons: [{ 
 
       label: 'Ok', 
 
       action: function(dialog) { 
 
        dialog.close(); 
 
       } 
 
      }] 
 
     }); 
 

 
     var img_src = "../profilepic/" + response; 
 
     setTimeout(5000); 
 
     $("#image").attr("src", img_src); 
 
    }, 
 
    'onStart': function() { 
 
     $('#upload').show(); 
 
    } 
 
});
<input type="file" name="datafile" accept="image/*"/><br/> 
 
<div id="upload" style="display:none;">Uploading..</div>

Si vous souhaitez télécharger des fichiers comme celui-ci, visite ce lien pour jQuery.AjaxFileUpload.js

+0

C'est juste un morceau de code, j'ai fait dans mon cas. J'espère que ça t'aidera. J'ai utilisé jQuery.AjaxFileUpload.js pour télécharger le fichier. –