2017-09-23 4 views
0

dans l'entité comme cela, je mets le HttpPostedFileBase avec le nom ImageFile nous virtuel parce que je suis en utilisant la cartographieTag Entrée renvoie Null au modèle int Créer ActionResult

public class Slider : IEntity 
{ 
     public virtual int Id { get; set; } 

     public virtual HttpPostedFileBase ImageFile { get; set; } 

    } 

Ici, dans l'entité im obtenir entité. ImageFile = null si en dessous du Code des actions

[HttpPost] 
     public ActionResult AddOrEdit(Slider entity) 
    { 
     try 
     { 
      string fileName = Path.GetFileNameWithoutExtension(entity.ImageFile.FileName); 
      string extension = Path.GetExtension(entity.ImageFile.FileName); 
      fileName = fileName + DateTime.Now.ToString("yymmssfff") + extension; 
      entity.Image = fileName; 
      fileName = Path.Combine(Server.MapPath("~/Image/"), fileName); 
      entity.ImageFile.SaveAs(fileName); 
      if (ModelState.IsValid) 
      { 
       if (entity.Id == 0) 
       { 

        _sliderService.Insert(entity); 
       } 

dans la vue i ajouté la balise d'entrée avec le nom ImageFile donc normalement je ne devrais pas obtenir nulle ??

s'il vous plaît aider

@model Slider 
@{ 

    Layout = null; 
} 

@using (Html.BeginForm("AddOrEdit", "Slider", FormMethod.Post, new { id = 
"form", enctype = "multipart/form-data" , onsubmit = "return 
    SubmitForm(this)" })) 
    { 
     @Html.HiddenFor(m => m.Id) 



    <div class="form-group" style="height:270px;"> 
     @Html.LabelFor(m => m.ImageFile, new { @class = "blue-text", @style = 
     "font-size:16px", @id = "" }) 

    <input name="ImageFile" type="file" /> 

</div> 

<div class="form-group"> 
    <input type="submit" value="Submit" class="btn btn-primary" /> 
    <input type="reset" value="Reset" class="btn" /> 
</div> 

}

Répondre

0

Merci les gars pour votre aide, je l'ai résolu en supprimant "onsubmit =" SubmitForm de retour (ce) "à partir de l'étiquette Html.BeginForm, mais dans ce cas, je ne reçois pas les messages de validation ou les messages de notification des idées ???

Ci-dessous le code de onsubmit

function SubmitForm(form) { 
     $.validator.unobtrusive.parse(form); 
     if ($(form).valid()) { 
      $.ajax({ 
       type: "POST", 
       url: form.action, 
       data: $(form).serialize(), 
       success: function (data) { 
        if (data.success) { 
         Popup.dialog('close'); 
         dataTable.ajax.reload(); 

         $.notify(data.message, { 
          globalPosition: "top center", 
          className: "success" 
         }) 

        } else { 
         Popup.dialog('close'); 

         $.notify(data.message, { 
          globalPosition: "top center", 
          className: "error" 
         }) 
        } 
       } 
      }); 
     } 
     return false; 
    } 
+0

Je suis l'aide de @Pankaj Makwana pour résoudre le problème en changeant quelques lignes dans le code Jquery. vous pouvez trouver la solution dans le lien ci-dessous. https://stackoverflow.com/questions/46400029/input-type-file-not-getting-serialized-in-jquery-ajax – Killua

0

Afin d'obtenir le fichier que vous pouvez modifier l'action params comme celui-ci:

[HttpPost] 
public ActionResult AddOrEdit(HttpPostedFileBase ImageFile,Slider slider) 
{ 
.... 
} 

mais aussi vous devez changer votre entité comme celui-ci :

public class Slider : IEntity 
{ 
    public virtual int Id { get; set; } 
    public virtual string ImageUrl { get; set; } 
} 

puis à l'intérieur de l'action que vous pouvez faire:

if (ImageFile!= null) 
     { 
      slider.ImgUrl = SaveImage(ImageFile); 
      db.Slider.Add(slider); 
      db.SaveChanges(); 

     } 

et la méthode SaveImage:

private string SaveImage(HttpPostedFileBase uploadFile) 
     { 
      if (uploadFile != null && uploadFile.ContentLength > 0) 
      { 
       string relativePath = "~/Image/" + Path.GetFileName(uploadFile.FileName); 
       string physicalPath = Server.MapPath(relativePath); 
       uploadFile.SaveAs(physicalPath); 
       return uploadFile.FileName; 
      } 
      return null; 
     }