Как мне получить данные из списка и базы данных пакетного обновления? - PullRequest
0 голосов
/ 15 октября 2019

Я хочу иметь возможность пакетного обновления данных в моей базе данных. Я могу отображать данные в виде списка, но получение данных для обновления БД приводит к этой ошибке:

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; }
    }
}

Я беру данные из двух таблиц иобъединяя его, чтобы отобразить как один вид. Я должен быть в состоянии обновить поля MarksAchieve из списка и затем нажать «Сохранить». Затем он будет проходить через базу данных и обновлять все поля MarksAchieveed для каждого элемента в списке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...