【问题标题】:value cannot be null: _context.Add(models.Reservations.FirstOrDefault());值不能为空:_context.Add(models.Reservations.FirstOrDefault());
【发布时间】:2021-06-27 19:16:20
【问题描述】:

我收到了错误:

ArgumentNullException:值不能为空。 (参数'来源')

这是我收到错误的操作代码:

[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);
    }

这是我的模型类:

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);
}

【问题讨论】:

  • 您有很多问题,从最初的错误(由您在剃刀视图中编写代码的方式引起)到您如何设计模型。我很确定没有人可以帮助解决如此严重的缺陷(需要大量调整),您可能会被卡住或最终尝试自己解决,尤其是在其他人(您的朋友)的亲自帮助下,大学...)。
  • 除了这个论坛没有人帮忙!我不确定是否有很多问题,因为除了 post 上的 create 操作之外,一切都运行良好。在我实现 2 个模型类之前它工作正常(它正在使用 1 个模型)。添加它后,除了正在运行的模型之外,我让所有东西都运行了。
  • 谁能解释我在代码中的问题。如果我的主要逻辑在这里是错误的,你能告诉我从一个模型获取数据并从另一个模型加载数据的正确方法(在同一个视图和控制器中)。
  • 您好,请问您的预订型号,房间型号详情。根据您的代码,您似乎正朝着错误的方向前进。

标签: c# asp.net asp.net-mvc asp.net-core razor


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    • 2017-06-04
    • 2021-08-01
    • 2015-11-07
    • 1970-01-01
    相关资源
    最近更新 更多