2016-05-01 17 views
2

Ich möchte nur die Route der Bilder in der Datenbank speichern. Also versuche ich das.Wie kann ich mehr als ein Bild in der Datenbank speichern?

Und ich bekomme diesen Fehler System.NullReferenceException: Objektverweis nicht auf eine Instanz eines Objekts festgelegt.

Das ist mein Controller-

public ActionResult SaveImages(IEnumerable<HttpPostedFileBase> img, Imagenes images) 
    { 
     foreach (var n in img) 
     { 
      var PhotoUrl = Server.MapPath("/images" + n.FileName); 
      if (n != null && n.ContentLength > 0) 
       n.SaveAs(PhotoUrl); 
      images.imgUrl = "/images" + n.FileName; 

      db.Imagenes.Add(images); 
      db.SaveChanges(); 
     } 
     return View("Index"); 

    } 

Das ist meine Modellklasse ist

public partial class Imagenes 
{ 
    public int id { get; set; } 

    [StringLength(200)] 
    public string imgUrl { get; set; } 
} 

meine Ansicht

@{ 
ViewBag.Title = "Home Page";} 

@using (Html.BeginForm("SaveImages", "Home", FormMethod.Post, new { enctype = "multipart/form-data" })) 
{ 
<div> 
    <input type="file" name="img" id="img" multiple /> 
    <input type="submit" name="submit" value="Save"/> 
</div>} 
+1

Was nicht funktioniert? Sie brauchen den zweiten Parameter in Ihrer Methode nicht wirklich? Wie sieht deine Rasiereransicht aus? – Shyju

+0

ja ich brauche es, weil durch den zweiten Parameter ich das Bild in der Datenbank speichern –

+0

Welche Zeile des Codes gibt den Fehler? –

Antwort

2

Der Fehler, den Sie bekommen ist nichts über den Bildteil zu speichern, aber Ich nehme an, es ist die Verwendung Ihrer images Eigenschaft ...

Wie Sie nicht angeben, wo diese Eigenschaft kommt, automatisch MVC geht davon aus, dass eine POST Variable ist, und in Ihrem HTML, haben Sie nichts von möglichen ...

Änderung Ihres Aktionscode an:

public ActionResult SaveImages(IEnumerable<HttpPostedFileBase> img) 
{ 
    const string folderToUpload = "/images"; 

    foreach (var n in img) 
    { 
     var imageToUpload = folderToUpload + n.FileName; 
     var photoUrl = Server.MapPath(imageToUpload); 

     if (n != null && n.ContentLength > 0) { 

      n.SaveAs(photoUrl);  // save to folder 

      var images = new Imagenes { 
       imgUrl = imageToUpload 
      }; 

      db.Imagenes.Add(images); // add to repository 
      db.SaveChanges();  // save repositorychanges 
     } 
    } 

    return redirectToAction("Index"); 
} 

ich gehe davon aus, dass auch db wurde bereits in Ihrem Konstruktor injiziert, und es ist nicht NULL

-Code bearbeitet:

  • erstellen Sie eine konstante Variable, um den Ordner hochzuladen, damit Sie diesen Code nicht immer wiederholen
  • Erstellen Sie eine Variable, die den vollständigen Pfad des Bildes enthält, also wiederholen Sie diesen Code nicht über und über (nicht vergessen: DRY - Do not Repeat Yourself)

  • speichern zur Datenbank nur dann, wenn die Datei gespeichert wurde

  • eine neue Variable erstellen Ihr Objekt zu halten, um die Aktion zu speichernden
  • umleiten redirectToAction mit wie Sie vielleicht einige Anrufe in Ihrem Index haben und nur die Umleitung auf die Ansicht würden Sie geben ein Fehler
  • Ausdauer sein, ändern Sie die PhotoUrl zu photoUrl (lokale Variablen = beginnen mit Kleinbuchstaben)
+0

großer Mann danke, funktioniert perfekt. –