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

ASP.NET MVC Create视图空引用错误及批量提交改造咨询

解决批量录入DEPARTMENTS_STATISTICS数据的问题

1. 修复视图空引用错误

出现Object reference not set to an instance of an object是因为Get请求时,Controller没有传递初始化的List模型,导致视图中Model为null,访问Model.Count触发空引用异常。需要在Get方法中先创建包含空实体的List,再传给视图。

2. 修改Controller的Create Get方法

初始化若干空的统计实体(数量可按需调整),确保视图能正常渲染编辑器:

public ActionResult Create()
{
    // 初始化3个空的部门统计实体,可根据需求增减数量
    var batchModel = new List<DEPARTMENTS_STATISTICS>
    {
        new DEPARTMENTS_STATISTICS(),
        new DEPARTMENTS_STATISTICS(),
        new DEPARTMENTS_STATISTICS()
    };
    return View(batchModel);
}

3. 修改Controller的Create Post方法

接收List类型的参数,验证后批量插入数据库,同时过滤未填写的空实体:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(List<DEPARTMENTS_STATISTICS> batchModel)
{
    if (ModelState.IsValid)
    {
        foreach (var stat in batchModel)
        {
            // 根据表字段实际情况调整空值判断条件,避免插入完全空白的数据
            if (!string.IsNullOrWhiteSpace(stat.DepartmentName) || stat.StatValue != null)
            {
                db.DEPARTMENTS_STATISTICS.Add(stat);
            }
        }
        db.SaveChanges();
        return RedirectToAction("Index");
    }
    // 验证失败时返回视图,保留用户已输入的内容
    return View(batchModel);
}

4. 调整视图代码

使用带索引的for循环绑定模型,确保表单字段名称符合ModelBinder的解析规则:

@model List<warehouse.Models.DEPARTMENTS_STATISTICS>

@using (Html.BeginForm()) 
{
    @Html.AntiForgeryToken()
    
    <div class="form-horizontal">
        <h4>批量录入部门统计数据</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        
        @for (int i = 0; i < Model.Count; i++)
        {
            <div class="form-group">
                @Html.LabelFor(m => m[i].DepartmentName, new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(m => m[i].DepartmentName, new { htmlAttributes = new { @class = "form-control" } })
                    @Html.ValidationMessageFor(m => m[i].DepartmentName, "", new { @class = "text-danger" })
                </div>
            </div>
            
            <div class="form-group">
                @Html.LabelFor(m => m[i].StatValue, new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(m => m[i].StatValue, new { htmlAttributes = new { @class = "form-control" } })
                    @Html.ValidationMessageFor(m => m[i].StatValue, "", new { @class = "text-danger" })
                </div>
            </div>
            
            <!-- 其他字段按照上述格式添加 -->
            <hr />
        }
        
        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="保存" class="btn btn-default" />
            </div>
        </div>
    </div>
}

补充说明

  • 如果需要动态添加录入行(用户点击按钮新增输入项),可以通过JavaScript克隆表单行并更新索引值,实现更灵活的批量录入。
  • 确保模型类的字段添加了正确的验证特性(如[Required]),视图会自动显示验证提示,提升用户体验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 23:12:16