2010-11-02 53 views
0

您好的實例我已經格蘭以下在HomeController.cs代碼對象引用不設置爲一個對象

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using System.Web.Mvc.Ajax; 
using MovieApp.Models; 
namespace MovieApp.Controllers 
{ 
    public class HomeController : Controller 
    { 

     private MoviesDBEntities _db = new MoviesDBEntities(); 

     // 
     // GET: /Home/ 

     public ActionResult Index() 
     { 

      return View(_db.MovieSet.ToList()); 

     } 

     // 
     // GET: /Home/Details/5 

     public ActionResult Details(int id) 
     { 
      return View(_db.MovieSet); 
     } 

     // 
     // GET: /Home/Create 

     public ActionResult Create() 
     { 

      return View(); 

     } 

     // 

     // POST: /Home/Create 

     [AcceptVerbs(HttpVerbs.Post)] 

     public ActionResult Create([Bind(Exclude = "Id")] Movie movieToCreate) 
     { 

      if (!ModelState.IsValid) 

       return View(); 

      _db.AddToMovieSet(movieToCreate); 

      _db.SaveChanges(); 

      return RedirectToAction("Index"); 

     } 

     // 
     // GET: /Home/Edit/5 

     public ActionResult Edit(int id) 
     { 

      var movieToEdit = (from m in _db.MovieSet 

           where m.Id == id 

           select m).First(); 

      return View(movieToEdit); 

     } 

     // 
     // POST: /Home/Edit/5 

     [AcceptVerbs(HttpVerbs.Post)] 

     public ActionResult Edit(Movie movieToEdit) 
     { 

      var originalMovie = (from m in _db.MovieSet 

           where m.Id == movieToEdit.Id 

           select m).First(); 

      if (!ModelState.IsValid) 

       return View(originalMovie); 

      _db.ApplyPropertyChanges(originalMovie.EntityKey.EntitySetName, movieToEdit); 

      _db.SaveChanges(); 

      return RedirectToAction("Index"); 

     } 
    } 
} 

我已經創建了一個詳細用下面的代碼查看:

<fieldset> 
     <legend>Fields</legend> 
     <p> 
      Id: 
      <%= Html.Encode(Model.Id) %> 
     </p> 
     <p> 
      Title: 
      <%= Html.Encode(Model.Title) %> 
     </p> 
     <p> 
      Director: 
      <%= Html.Encode(Model.Director) %> 
     </p> 
     <p> 
      DateReleased: 
      <%= Html.Encode(String.Format("{0:g}", Model.DateReleased)) %> 
     </p> 
    </fieldset> 

然而,當我運行它,我得到一個錯誤,指出對象引用未設置爲此行上對象的實例:<%= Html.Encode(Model.Id) %>我假設我在Details ActionResult下的HomeController.cs中丟失了某些內容。但是什麼?

謝謝。

編輯2:

添加此的代碼:

public ActionResult Details(int id) 
{ 
    //return View(); 

    var movieToView = (from m in _db.MovieSet 

         where m.Id == id 

         select m).First(); 

    return View(movieToView); 

解決了這個問題。但爲什麼我需要指定這個?返回View()不只是顯示它?爲什麼?

+0

Model is null .. MovieApp.Models的後期代碼,它可能被聲明和初始化,我們將嘗試查看可能的錯誤。 – 2010-11-02 13:36:08

+0

已添加到原始問題 – Cameron 2010-11-02 13:38:47

+0

檢查Exception.StackTrace - 如果您在調試模式下運行,它將包含行號。 – 2010-11-02 13:40:28

回答

0

看起來你的_db.MovieSet屬性返回一個空值。我會在調試器的控制器詳細信息方法中加入一個斷點來檢查這一點。

編輯:看着你的代碼,它出現了其他方法,你的_db.MovieSet屬性是一個集合,而不是一個對象。我只是猜測,但作爲你的細節行動有一個id參數,我會認爲使用linq從該集合返回一個對象將有所幫助。沿着線的東西:

return View(_db.MovieSet.Single(m => m.Id == id)); 

它很可能是一個想法,這個分配給一個變量,並傳遞給視圖來捕捉任何空值異常之前檢查空值和處理,然後優雅地:

var movieSet = _db.MovieSet.SingleOrDefault(m => m.Id == id); 
if(moviesSet != null) 
    return View(movieSet); 
else 
    return View("Error"); 

確保您的詳細視圖具有與之相關的正確模型。

+0

所有其他視圖,如索引,編輯和創建所有工作,它只是一個不起作用的細節。 – Cameron 2010-11-02 13:34:51

+0

我需要添加額外的代碼到'返回視圖();'在細節? – Cameron 2010-11-02 13:36:17

0

什麼都看不到你,我不是專家,縱觀公衆的ActionResult編輯(電影movieToEdit)看到它看起來像一個空的返回的絕佳去處。

0

這爲我提供了答案,顯然模型中的命名約定是不正確的。使用edmx實體模型名稱。如_db。 電影 .ToList()該線程還包含源代碼。 http://forums.asp.net/post/4051978.aspx

+0

嗨,歡迎來到SO。雖然您提供的鏈接可能具有回答問題的信息,但請注意,鏈接僅適用於SO。這是爲了防止將來鏈接死亡。作爲參考的鏈接非常受歡迎,但請在將來添加所有相關信息。 – Deepend 2015-07-19 16:37:09

相關問題