2015-10-31 1 views
1

Voici le code pour comprendre mon problème:Entity Framework/MVC. Comment empêcher un blob d'image enregistrée dans la base de données est supprimé lors de la mise à jour enregistrement en cours sans sélectionner une nouvelle image

CONTRÔLEUR:

[HttpPost] 
[ValidateAntiForgeryToken] 
public async Task<ActionResult> Edit([Bind(Include = "Field1,Field2,ect")] ControllerName controllername, HttpPostedFileBase ImageData) 
    { 
     if (ModelState.IsValid) 
     { 
      try 
      { 
       if (ImageData != null && ImageData.ContentLength > 0) 
       { 
        using (var reader = new System.IO.BinaryReader(ImageData.InputStream)) 
        { 
         controllername.ImageBLOB_FieldDB = reader.ReadBytes(ImageData.ContentLength); //imageUrl è un tipo varbinary 
        } 
       } 
       else 
       { 
        ImageData = controllername.ImageBLOB_FieldDB; 
       } 

       db.Entry(controllername).State = EntityState.Modified; 
       await db.SaveChangesAsync(); 
       return RedirectToAction("Index"); 
      } 
      catch (DbEntityValidationException dbEx) 
      { 
       foreach (var validationErrors in dbEx.EntityValidationErrors) 
       { 
        foreach (var validationError in validationErrors.ValidationErrors) 
        { 
         Trace.TraceInformation("Property: {0} Error: {1}", 
               validationError.PropertyName, 
               validationError.ErrorMessage); 
        } 
       } 
      } 
     } 

     return View(controllername); 
    } 

VIEW:

<div class="form-group"> 
      @Html.LabelFor(model => model.ImageBLOB_FieldDB, htmlAttributes:  new { @class = "control-label col-md-2" }) 
      <div class="col-md-3"> 
       <label class="col-md-3">Current Image</label> 
       @if (Model.ImageBLOB_FieldDB!= null) 
      { 
        <img style="height:auto; max-width:200px; width:100%; float: left !important; text-align: left !important; " 
         src='@Url.Action("GetImage", "controllername", new { id = Model.Id })' /> 
       } 
      </div> 
      <div class="col-md-3"> 
       <div id="imageNew" class="hidden"> 
        <label class="col-md-3">New Image</label> 
        <div class="col-md-3"> 
         <div id="osp"> 
          <div id="imagePreview"></div><br> 
         </div> 
        </div> 
       </div> 
      </div> 
      <div class="col-md-3"> 
       <input type="file" id="ImageData" name="ImageData" onchange="fileCheck(this);" /> 
     </div> 
    </div> 

Lorsque je sauvegarde et que je ne sélectionne pas une nouvelle image, la sauvegarde précédente est supprimée. Avez-vous une idée? Merci d'avance!

En pratique, je ne peux pas "garder" dans le changement de prise de cas précédent ... Je pense que c'est parce que l'entrée "ImageData" n'est pas initialisée et qu'elle élimine l'année précédente.

Répondre

1

Je résolus simplement par cette ligne de code dans la vue:

@Html.HiddenFor(model => model.ImageBLOB_FieldDB);