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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 18:52:43