You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET MVC 5使用下拉框创建数据库记录触发ArgumentNullException报错

问题根因

你遇到的ArgumentNullException: Value cannot be null. (Parameter 'items')报错,本质是实例化SelectList时传入的数据源ViewBag.statusTypeList为空值。编辑功能正常是因为编辑页的GET请求后台已经给ViewBag.statusTypeList做了赋值,而新增功能对应的Action漏了赋值逻辑。

解决步骤

  • 第一步:给Create的GET请求Action添加ViewBag.statusTypeList赋值逻辑,代码示例如下:
public IActionResult Create()
{
    // 其他业务逻辑
    List<SpeakerStatusLookupModel> statusTypeList = _context.SpeakerStatusLookupModel.ToList();
    statusTypeList.Insert(0, new SpeakerStatusLookupModel { Id = 0, SpeakerStatus = "Select" });
    ViewBag.statusTypeList = statusTypeList;
    return View();
}
  • 第二步:给Create的POST请求Action也补充赋值逻辑,防止模型验证失败返回视图时再次触发空值报错:
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Create(SpeakerQuery model)
{
    if(ModelState.IsValid)
    {
        // 保存数据的业务逻辑
        return RedirectToAction(nameof(Index));
    }
    // 验证失败返回页面前重新给下拉列表赋值
    List<SpeakerStatusLookupModel> statusTypeList = _context.SpeakerStatusLookupModel.ToList();
    statusTypeList.Insert(0, new SpeakerStatusLookupModel { Id = 0, SpeakerStatus = "Select" });
    ViewBag.statusTypeList = statusTypeList;
    return View(model);
}

可选优化方案

  • 视图层增加空值兼容逻辑,避免偶发空值导致页面崩溃:
<select asp-for="SpeakerStatus" class="control-label" asp-items="@(ViewBag.statusTypeList != null ? new SelectList(ViewBag.statusTypeList, "Id", "SpeakerStatus") : Enumerable.Empty<SelectListItem>())"></select>
  • 推荐改用强类型ViewModel传递下拉列表数据,替代ViewBag,可从编码阶段就避免漏赋值的问题,也能获得智能提示支持。
  • 给SpeakerQuery类的SpeakerStatus属性添加[Required]验证注解,避免用户未选择下拉项就提交导致数据异常。

内容的提问来源于stack exchange,提问作者Michael Easterbrook

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 12:36:03