2016-10-09 1 views
0

Je voulais savoir comment faire référence à un élément spécifique/clé avec une page Web basée sur le nom de l'entrée.Comment se référer à une touche spécifique IEnumerable <HttpPostedFileBase>

J'ai une forme comme ci-dessous et je voudrais télécharger trois images dans une base de données SQL-Express:

else if (property.PropertyName == "Image1") 
        { 
         <div class="form-group"> 
          <label for="file1">Filename:</label> 
          <input type="file" name="fileUpload[0]" /> 
          @if (Model.Image1 == null) 
          { 
           <div class="form-control-static">No Image</div> 
          } 
          else 
          { 
           <div> Image</div> 
          } 
         </div> 
        } 
        else if (property.PropertyName == "Image2") 
        { 
         <div class="form-group"> 
          <label for="file2">Filename:</label> 
          <input type="file" name="fileUpload[1]" /> 
          @if (Model.Image2 == null) 
          { 
           <div class="form-control-static">No Image</div> 
          } 
          else 
          { 
           <div> Image</div> 
          } 
         </div> 
        } 
        else if (property.PropertyName == "Image3") 
        { 
         <div class="form-group"> 
          <label for="file3">Filename:</label> 
          <input type="file" name="fileUpload[2]" /> 
          @if (Model.Image3 == null) 
          { 
           <div class="form-control-static">No Image</div> 
          } 
          else 
          { 
           <div> Image</div> 
          } 
         </div> 
        } 

Mon contrôleur est le suivant:

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Edit(Client client, IEnumerable<HttpPostedFileBase> fileUpload) 
    { 
     if (ModelState.IsValid) 
     { 
      if(fileUpload != null) 
      { 
       foreach (var file in fileUpload) 
       { 
        //if (file.ContentType == "jpg") 
        //{ 

         if (file.FileName == "fileUpload[0]") 
         { 
          client.Image1 = new byte[file.ContentLength]; 
          file.InputStream.Read(client.Image1, 0, file.ContentLength); 
         } 
         if (file.FileName == "fileUpload[1]") 
         { 
          client.Image2 = new byte[file.ContentLength]; 
          file.InputStream.Read(client.Image2, 0, file.ContentLength); 
         } 

         if (file.FileName == "fileUpload[2]") 
         { 
          client.Image3 = new byte[file.ContentLength]; 
          file.InputStream.Read(client.Image3, 0, file.ContentLength); 
         } 
        //} 
       } 
      }    
      Repo.SaveProduct(client);//this is an interface to save the changes to the database. 

      return RedirectToAction("Index"); 

Comment mapper retour à une variable particulière dans le Enumerable, j'utilise ce fichier. FileName == "fileUpload [2]". Je suis à peu près certain que c'est ce qui ne va pas. J'essaie de me référer à la balise html ''. Est-ce qu'il y a un moyen de faire ça?

+1

'file.FileName' renvoie le nom du fichier que l'utilisateur téléchargé (pas le nom de la propriété). Ce n'est pas clair ce que vous voulez faire ici. –

Répondre

0

Convertir à une liste et utiliser l'index

if(fileUpload != null) { 
    var files = fileUpload.ToList(); 
    for (var index = 0; index < files.Count; index++) { 
     var file = files[index]; 

     if (index == 0) { 
      client.Image1 = new byte[file.ContentLength]; 
      file.InputStream.Read(client.Image1, 0, file.ContentLength); 
     } 

     if (index == 1) { 
      client.Image2 = new byte[file.ContentLength]; 
      file.InputStream.Read(client.Image2, 0, file.ContentLength); 
     } 

     if (index == 2) { 
      client.Image3 = new byte[file.ContentLength]; 
      file.InputStream.Read(client.Image3, 0, file.ContentLength); 
     }     

    } 
}