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
相关产品推荐
相关产品推荐

