ASP.NET MVC Code First下拉框报错:未将对象引用设置到对象实例
问题分析与解决方案
嘿,我一眼就揪出你遇到的空引用错误根源啦!这个问题核心是控制器Action和视图文件的名称不匹配,导致你的NikashaViewModels没有被正确传递到Create.cshtml视图中,最终Model.karyakrams变成了null,调用SelectList时自然就抛出了"未将对象引用设置到对象的实例"的错误。
具体问题点
你在控制器里定义的Action是New(),但你的视图文件是Create.cshtml。ASP.NET MVC的默认规则是:Action名称会对应同名的视图文件。也就是说,当你访问/你的控制器名/New时,它会加载New.cshtml;但如果你直接访问/你的控制器名/Create,要么找不到对应的Action,要么对应的Action没有给viewModel赋值,导致视图里的Model.karyakrams为null。
两种解决办法
方法1:修改控制器Action名称匹配视图
把控制器里的New()改成Create(),这样默认就会和Create.cshtml对应上:
private ApplicationDbContext db = new ApplicationDbContext(); public ActionResult Create() { var viewModel = new NikashaViewModels { karyakrams = db.karyakrams.ToList() }; return View(viewModel); }
方法2:保持Action名称,明确指定视图
如果不想改Action名称,就在返回视图时手动指定要加载Create.cshtml:
private ApplicationDbContext db = new ApplicationDbContext(); public ActionResult New() { var viewModel = new NikashaViewModels { karyakrams = db.karyakrams.ToList() }; return View("Create", viewModel); // 明确指定返回Create视图 }
额外防护建议
为了避免后续再出现类似的空引用问题,你可以在视图里加个空值检查,用Null条件运算符和空合并运算符做兜底:
@Html.DropDownListFor(model => model.KaryakramId, new SelectList(Model.karyakrams?.ToList() ?? new List<karyakramModels>(), "KaryakramId", "KaryakramName"))
内容的提问来源于stack exchange,提问作者nischalinn
相关产品推荐
相关产品推荐

