值不能为空:_context.Add(models.Reservations.FirstOrDefault());

value cannot be null: _context.Add(models.Reservations.FirstOrDefault());

我遇到错误:

ArgumentNullException: Value cannot be null. (Parameter 'source')

这是我的操作代码,我从中得到错误:

[HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Create(Models.Models models)
    {
        if (ModelState.IsValid)
        {
            _context.Add(models.Reservations.FirstOrDefault());
            await _context.SaveChangesAsync();
            return RedirectToAction(nameof(Index));
        }
        return View(models);
    }

这是我的模型class:

public class Models
{
    public IEnumerable<ReservationsModel> Reservations { get; set; }
    public IEnumerable<RoomsModel> Rooms { get; set; }
}

这是我如何从视图中获取值的示例:

<select asp-for="Reservations.FirstOrDefault().RoomId" class="form-select" aria-label="Default select example">
        @foreach (var item in Model.Rooms)
        {
            <option asp-for="Reservations.FirstOrDefault().RoomId" value="@Html.DisplayFor(modelItem => item.RoomID)">@Html.DisplayFor(modelItem => item.RoomID)</option>
        }
</select>

最后是我的 GET 方法,以备不时之需:

public async Task<IActionResult> Create()
{
    var obj = new Models.Models
    {
        Reservations = await _context.Reservations.ToListAsync(),
        Rooms = await _context.Rooms.ToListAsync()
    };
    return View(obj);
}

我自己解决了这个问题!真的很简单!!! 刚刚在相同类型的模型 class 中创建了另一个 属性,但不是 IEnumerable,它只是类型 ReservationsModel:

public class Models
{
    public IEnumerable<ReservationsModel> Reservations { get; set; }
    public ReservationsModel Reservations2 { get; set; }
    public IEnumerable<RoomsModel> Rooms { get; set; }
}

并使用它将数据从视图传递到控制器。 感谢任何回答我问题的人!