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

ASP.NET MVC控制器向视图传递筛选列表时遇空引用异常

问题解决方法

空引用异常的核心原因是SelectList指定的字段名与ViewModel的属性不匹配,同时查询逻辑可以优化提升性能,具体修正如下:

1. 修正SelectList的字段映射

你创建的BundleNodeViewModel属性是StudyId和StudyName,但初始化SelectList时却用了"Id"和"Name",系统找不到对应属性就会抛出空引用异常。修改为:

ViewBag.studyList = new SelectList(studies.OrderBy(p => p.StudyName), "StudyId", "StudyName");

2. 优化查询逻辑(可选但推荐)

原查询中把子查询提前ToList()会导致先加载所有匹配的StudyId到内存,再做Contains判断,性能较差。可以用Any()替代,让EF直接生成更高效的SQL:

var studies = (from t in _context.Studies
               where !_context.StudyNodes.Any(sn => sn.NodeId == id && sn.StudyId == t.Id)
               select new BundleNodeViewModel
               {
                   StudyId = t.Id,
                   StudyName = t.Name
               }).ToList();

3. 确认ViewModel定义

确保BundleNodeViewModel正确定义了对应属性,避免属性名拼写错误:

public class BundleNodeViewModel
{
    public int StudyId { get; set; }
    public string StudyName { get; set; }
}

视图端验证(补充)

如果视图中使用DropDownList或类似控件,确认绑定的是ViewBag.studyList,例如:

@Html.DropDownList("StudyId", (SelectList)ViewBag.studyList, "请选择", new { @class = "form-control" })

内容的提问来源于stack exchange,提问作者A Cameron

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 02:41:03