【问题标题】:NullReferenceException: Object reference not set to an instance of an object error in ASP.NET MVCNullReferenceException:对象引用未设置为 ASP.NET MVC 中的对象错误的实例
【发布时间】:2021-07-11 16:32:40
【问题描述】:

我是 ASP.NET MVC 的新手,我得到了

"NullReferenceException: 对象引用未设置为 对象”

尝试显示数据库中的数据时出现异常。我有像这样连接的MoviesReviews 表:

public class Movie
{
    public int MovieId { get; set; }
    public string Title { get; set; }

    [DataType(DataType.Date)]
    public DateTime ReleaseDate { get; set; }
    public string Genre { get; set; }
    public decimal Price { get; set; }

    public virtual ICollection<Review> Reviews { get; set; }
    
}
public class Review
{
    #region Review Properties
    [Key]
    public int ReviewId { get; set; }

    [Required(ErrorMessage = "Comment can't be empty.")]
    public string Comment { get; set; }

    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}")]
    public DateTime Date { get; set; }
    #endregion

    #region Dependencies
    [ForeignKey("Id")]
    public int MovieId { get; set; }
    public Movie Movie { get; set; }

    #endregion
}

上下文文件如下所示:

using Microsoft.EntityFrameworkCore;
using MvcMovie.Models;

namespace MvcMovie.Data
{
    public class MvcMovieContext : DbContext
    {
        public MvcMovieContext()
        {
        }

        public MvcMovieContext(DbContextOptions<MvcMovieContext> options)
            : base(options)
        {
        }

        public DbSet<Movie> Movies { get; set; }
        public DbSet<Review> Reviews { get; set; }
    }
}

我需要在详细信息视图中显示每部电影的评论,因此我创建了一个可以正常工作的评论添加部分(评论已添加到数据库中)。现在,当我尝试显示当前电影的评论时,我在视图文件中使用了以下代码:

@foreach (Review review in Model.Reviews)
{
    <div class="container">
        <div class="row">
            <div class="col-md-2"></div>
            <div class="col-md-8">
                <div>
                    <p>@review.Comment</p>
                    <small class="pull-right">@review.Date</small>
                </div>
            </div>
        </div>
    </div>
    <hr />
}

另外我应该提到,视图使用这个模型:@model MvcMovie.Models.MovieReviews controller 看起来像这样:

 public class ReviewsController : Controller
    {
        private readonly MvcMovieContext _context = new MvcMovieContext();

        public ReviewsController(MvcMovieContext context)
        {
            _context = context;
        }

        public ActionResult New(Review review)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    review.Date = DateTime.Now;
                    _context.Reviews.Add(review);
                    _context.SaveChanges();
                    TempData["message"] = "Your review was added.";
                }
                catch (Exception)
                {
                }
            }

            return Redirect("/Movies/Details/" + review.MovieId.ToString());
        }
   }

电影控制器(仅将数据传递给视图的详细信息部分)如下所示:

  namespace MvcMovie.Controllers
    {
        public class MoviesController : Controller
        {
            private readonly MvcMovieContext _context;
    
            public MoviesController(MvcMovieContext context)
            {
                _context = context;
            }
            public async Task<IActionResult> Details(int? id)
            {
                if (id == null)
                {
                    return NotFound();
                }
    
                var movie = await _context.Movies
                    .FirstOrDefaultAsync(m => m.MovieId == id);
                if (movie == null)
                {
                    return NotFound();
                }
    
                return View(movie);
            }
        }
    }

异常出现在@foreach (Review review in Model.Reviews) 行上,所以我猜Model.Reviews 在某种程度上是NULL,但我不知道为什么会发生这种情况,因为评论表不是空的。对此有何建议?

【问题讨论】:

  • 您应该引用实例上下文,而不是类名。 asp.net 需要访问 _context。
  • 请在帖子中添加电影控制器
  • @Sergey 完成,我已经使用连接到视图的电影控制器更新了帖子。

标签: c# html asp.net-mvc database exception


【解决方案1】:

尝试修复您的详细信息操作:

 var movie = await _context.Movies.Include(r=>r.Reviews)
                    .FirstOrDefaultAsync(m => m.MovieId == id);
.....

为了防止以后出现这个错误,还要修复一个视图代码

@if ( Model.Reviews!=null)
{
  @foreach (Review review in Model.Reviews)
  {
....
  }
}

【讨论】:

    猜你喜欢
    • 2013-04-19
    • 2019-08-18
    • 1970-01-01
    • 2015-04-30
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    • 2014-10-15
    • 2022-10-13
    相关资源
    最近更新 更多