2010-11-02 50 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

相关问题