c# - 如何从列表和批量更新数据库中捕获数据?
问题描述
我希望能够批量更新我的数据库中的数据。我可以将数据显示为列表,但检索数据以更新数据库会导致此错误:
System.NullReferenceException:“对象引用未设置为对象的实例。”
我的代码如下:我的控制器
public ActionResult UpdateRecords(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
var view = from m in db.Tbl_Marks
join c in db.Tbl_Child on m.ChildID equals c.ChildID
where m.AID == id
select new Assessments { Child=c, Marks=m};
return View(view.ToList());
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult UpdateRecords(IEnumerable<Assessments> tbm )
{
if (ModelState.IsValid)
{
foreach(Assessments i in tbm)
{
Tbl_Marks m = new Tbl_Marks();
m.AID = i.Marks.AID;
m.MID = i.Marks.MID;
m.MarkAchieved = i.Marks.MarkAchieved;
m.ChildID = i.Marks.ChildID;
db.Entry(m).State = System.Data.Entity.EntityState.Modified;
}
db.SaveChanges();
return RedirectToAction("Assessments");
}
return View("Assessments");
}
我的观点
@model IEnumerable<CEDAR.Assessments>
<h2>Marks</h2>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.Child.ChildID)
</th>
<th>
@Html.DisplayNameFor(model => model.Child.Name)
</th>
<th>
@Html.DisplayNameFor(model => model.Child.Surname)
</th>
<th>
@Html.DisplayNameFor(model => model.Marks.MarkAchieved)
</th>
<th></th>
</tr>
@using (Html.BeginForm("UpdateRecords", "Admin"))
{
@Html.AntiForgeryToken()
foreach (var item in Model)
{
@Html.HiddenFor(modelItem => item.Marks.MID)
@Html.HiddenFor(modelItem => item.Marks.AID)
@Html.HiddenFor(modelItem => item.Marks.ChildID)
@Html.HiddenFor(modelItem => item.Child.Surname)
@Html.HiddenFor(modelItem => item.Child.Grade)
@Html.HiddenFor(modelItem => item.Child.Disabilities)
@Html.HiddenFor(modelItem => item.Child.ParentID)
@Html.HiddenFor(modelItem => item.Child.Enrolled)
<tr>
<td>
@Html.DisplayFor(modelItem => item.Child.ChildID)
</td>
<td>
@Html.DisplayFor(modelItem => item.Child.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Child.Surname)
</td>
<td>
@Html.EditorFor(modelItem => item.Marks.MarkAchieved, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(modelItem => item.Marks.MarkAchieved, "", new { @class = "text-danger" })
</td>
</tr>
}
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Save" class="btn btn-primary" />
<input type="button" value="Cancle" onclick="goBack()" class="btn btn-danger" />
</div>
</div>
}
</table>
我的模特
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace CEDAR
{
public class Assessments
{
public Tbl_Marks Marks { get; set; }
public Tbl_Child Child { get; set; }
}
}
我从两个表中获取数据并将其合并以显示为一个视图。我应该能够从列表中更新 MarksAchieved 字段,然后单击保存。然后它将通过数据库并更新列表中每个项目的所有 MarksAchieved 字段。
解决方案
推荐阅读
- winforms - 我想在输入数据后将datagridview转换为ini文件
- swift - 函数依赖于以前的 Swift
- angular - 将 Angular 表单控件分配给动态生成的对象数组
- java - Hashmap 结果只显示一行
- angular - 使用 renderer2 查找匹配的单词并应用样式
- android - 通过直接复制其 SQLite 文件来执行应用程序数据库备份是否安全?
- php - 使用 AMPPS 在 Mac 上获取 PHP 7.2
- java - 在没有通用接口的情况下调用通用方法
- angular - PrimeNg 确认对话框未打开
- latex - LaTeX中的逐项/枚举列表结构