2016-05-01 11 views
2

データベースの画像のルートを保存したいだけです。 だから私はこれを試してみてください。データベースに複数の画像を保存するにはどうすればよいですか?

このエラーが発生します。System.NullReferenceException:オブジェクト参照がオブジェクトのインスタンスに設定されていません。

これは、これはあなたが取得しているエラーは、一部を保存する画像については何もありませんが、

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

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

私の見る

@{ 
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

(小文字で始まる=ローカル変数)PhotoUrlphotoUrlに変更し、持続可能にするエラー

  • ?あなたのメソッドに2番目のパラメータは本当に必要ありませんか?どのようにあなたの剃刀のように見えるのですか? – Shyju

  • +0

    はい2番目のパラメータは、データベースに画像を保存するためです。 –

    +0

    どのコード行でエラーが表示されるのですか? –

    答えて

    2

    私のモデルクラスである

    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"); 
    
        } 
    

    私のコントローラであります私はそれがあなたのimagesプロパティの使用だと仮定しています...

    あなたは、そのプロパティがMVCは自動的にはPOST変数の、そしてあなたのHTMLに、あなたは一種の何もないと仮定し、どこから来るか...指定

    変更あなたのアクションコードになかったので:

    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"); 
    } 
    

    私もdbはすでにあなたのコンストラクタで注入したことを仮定している、そしてそれは、編集NULL

    コードではありません。

    • アップロードするフォルダを持つ定数変数を作成して、そのコードを何度も繰り返しないようにする
    • イメージの完全なパスを保持する変数を作成します。オーバー(覚えている:DRY - 自分を繰り返してはいけない)ファイルが

    • redirectToActionを使用して、アクションにリダイレクト保存する

    • は、あなたのオブジェクトを保持するために新しい変数を作成して保存した場合にのみ、データベースに保存

    • Indexに電話があり、ビューにリダイレクトするだけで動作していない何

    +0

    偉大な男の感謝、完璧に動作します。 –

    関連する問題