对象引用未设置为对象的实例,model 为 null

Object reference not set to an instance of an object., model is null

提问人:Johan 提问时间:11/9/2019 更新时间:11/9/2019 访问量:93

问:

我正在尝试显示一个清单,该清单从MySQL数据库获取数据并将其显示在视图中,并更新表中每个元素的变量(IsChecked)的值,无论我们是否检查了便利设施(我正在显示一些便利设施)。视图的模型是 Hotel_5.ViewModel.BookingRoom,其中 BookingRoom 是我创建的自定义模型,我在其中使用了多个模型。我在Model.AmenitiesList.Count()中遇到异常。模型为 null。

这是我的观点

<div class="form-group">
                @for (var i = 0; i < Model.AmenitiesList.Count(); i++)
                    {
                        @Html.CheckBoxFor(m => m.AmenitiesList[i].IsChecked, new { @class = "form-control" });
                        <label>@Model.AmenitiesList[i].amenityType</label>
                             //If you need to hide any values and get them in your post
                        @Html.HiddenFor(m => m.AmenitiesList[i].AmenityId)
                        @Html.HiddenFor(m => m.AmenitiesList[i].AmenityPrice)
                    }
            </div>

这是我的 ViewModel

public class BookingRoom
    {
        public Bookings bookings { get; set; }
        public Rooms rooms { get; set; }
        public List<Amenities> AmenitiesList { get; set; } = new List<Amenities>();
    }

这是我的设施模型

public class Amenities
    {
        [Key]
        public int AmenityId { get; set; }
        public double AmenityPrice { get; set; }
        public AmenityType amenityType { get; set; }
        public bool IsChecked { get; set; }
    }

    public enum AmenityType
    {
        tv,
        wi_fi,
        hair_dryer,
        help
    }
C# 实体框架 NullReferenceException

评论

2赞 Steve 11/9/2019
如何称呼视图?请在与此视图相关的控制器操作中添加代码。
0赞 Kristianne Nerona 11/9/2019
在遍历列表之前,您必须进行检查:。这样,在 get 请求中,您将对模型和 AmenitiesList 进行空检查。@if (Model != null && Model.Amenities != null)
0赞 Smudge202 11/9/2019
鉴于您已经标记了 entity-framework,我将假设两者都来自 ef 查询。我怀疑您在查询时需要便利设施,例如(更多信息在这里 - learn.microsoft.com/en-us/ef/ef6/querying/related-dataBookingRoomAmenitiesIncludeBookingRoomvar bookings = await context.BookingRooms.Include(x => x.AmenitiesList).ToListAsync())

答:

0赞 Ashkan Mobayen Khiabani 11/9/2019 #1

查询时,也应该包括它,否则它将为 null:AmenitiesList

在控制器中:

var bookingRoom = context.BookingRooms.Include(b => b.AmenitiesList).FirstOrDefault(b => b.Id == someId);
//                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

请注意,我查询的可能不是您想要的,它只是为了演示如何使用,您还应该添加.Include()using Microsoft.EntityFrameworkCore