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

ASP.NET MVC无数据库实现页面加载时填充1-20到ListBox及异常解决

嘿,我一眼就看出问题所在了——你遇到的System.NullReferenceException完全是因为视图里的Model根本没被赋值!你的Controller代码里虽然创建了NumberClass的实例,但既没把生成的选项列表赋值给它的numbers属性,也没把这个实例传给View,导致View渲染时Model是null,访问Model.numbers自然就报错了。

接下来一步步给你修正代码:

1. 修正Controller代码

你需要把生成的选项列表绑定到NumberClass的numbers属性,然后把这个实例传递给View。另外注意你要的是1到20,原来的循环是0到19,得调整一下:

public ActionResult Index() { 
    List<SelectListItem> items = new List<SelectListItem>(); 
    NumberClass num = new NumberClass(); 
    // 循环从1开始,到20结束,生成1-20的选项
    for(int i=1;i<=20;i++) { 
        SelectListItem selectList = new SelectListItem() { 
            Text = i.ToString(), 
            Value = i.ToString() 
        }; 
        items.Add(selectList); 
    } 
    // 把选项列表赋值给NumberClass的numbers属性
    num.numbers = items; 
    // 将Model实例传递给View
    return View(num); 
}

2. 完善View代码

首先要在视图顶部指定模型类型,这样IntelliSense能正常工作,还能避免一些隐性错误。另外可以加个空值保护,防止意外情况:

@model NumberClass

@using (Html.BeginForm()) { 
    // 使用空合并运算符,当Model或Model.numbers为null时,返回空列表避免报错
    @Html.ListBoxFor(m => m.Selectednumbers, Model?.numbers ?? new List<SelectListItem>()) 
}

关键要点总结

  • 永远记得把Model实例传递给View,否则View里的Model就是null
  • 要把数据正确绑定到Model的属性上,而不是只创建Model实例却不赋值
  • 在视图顶部添加@model声明,明确视图对应的模型类型,这是ASP.NET MVC的最佳实践
  • 空值保护(比如Model?.numbers ?? ...)能让代码更健壮,避免意外的空引用错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:18:30