更新数据表中的切割行并添加新记录 ASP.NET MVC

Posted

技术标签:

【中文标题】更新数据表中的切割行并添加新记录 ASP.NET MVC【英文标题】:Updating cuttent row in the datatable and adding new record ASP.NET MVC 【发布时间】:2021-11-16 13:37:11 【问题描述】:

这个问题是关于更新数据库表中的当前记录并添加新记录。

在我的 ASP.NET MVC 应用程序中,从视图中我已将相关数据传递给控制器​​,这是我的数据库表并突出显示要更新的相关记录。

这是我的控制器,可以看到视图传递的数据。

所以如图 1 所示,ApprovalProcess_Id 40 应该更新为今天的日期,approval_status 应该是 1,Approval_note 也应该更新。如您所见,图 3 注意数据已经存在。所以 Approval_ProcessId 是我单独获得的临时数据。

int tempAId = int.Parse(TempData.Peek("CurrentId").ToString());

我尝试的方式如图,也没有更新,我想更新当前记录的注释、批准状态、日期时间,并且需要添加具有相同 tempAID 的新记录包含新的approver_Id 的模型。

这是我当前的代码

public ActionResult ApproveRequest(ApprovalProcess approvalProcess)

        if (ModelState.IsValid)
        
            if (approvalProcess.Approvers != null)
            
                int tempAId = int.Parse(TempData.Peek("CurrentId").ToString());

                ApprovalParty approvalParty = new ApprovalParty();
                approvalParty.Approved_Date = DateTime.Now;
                approvalParty.Approved_Note = approvalProcess.Approvers.ToList().First().Approved_Note;
                approvalParty.Approve_Status = true;
            
            //approvalProcess approvalProcess1 = new approvalProcess();
            //approvalParty.Approved_Date = DateTime.Now;
            //approvalParty.Approve_Status = true;


            //ApprovalParty model = new ApprovalParty();
            
            ////approvalParty.ApprovalProcess_Id = tempAId;
            //approvalParty.Approved_Note = model.Approved_Note;

            //db.SaveChanges();
            return RedirectToAction("Index");
        
        else
        
            return View("Index");
        

【问题讨论】:

【参考方案1】:

您根本没有对数据库进行任何更新,也就是说您正在更新世界上的所有属性,但没有一个被推回您的数据库。

这是一个将更新推送到数据库的示例:

public ActionResult ApproveRequest(ApprovalProcess approvalProcess)

    if (ModelState.IsValid)
    
        int.TryParse(TempData.Peek("CurrentId").ToString(), out int tempAId);

        // This pulls the record from your db so that entity framework can track and update it.
        var approvalParty = db.ApprovalParties.Find(tempAId);
        approvalParty.Approval_Date = DateTime.Now;

        // This will error because you'd need to select a particular Approver in the list to determine which Approved_Note to use.
        // Should be something like Approvers.ToList()[0].Approved_Note
        approvalParty.Approved_Note == approvalProcess.Approvers.ToList().Approved_Note;
        approvalParty.Approve_Status = true;

        // Pushes the updated data to the database.
        db.SaveChanges();
    

对于添加新的 ApprovalParty 记录(我只是假设这就是您所说的,您将属性值映射到新的 ApprovalParty 并将其添加到 db.ApprovalParties

var approvalParty = new ApprovalParty

    Approved_Date = DateTime.Now,
    Approved_Note = approvalProcess.Approvers.ToList()[0].Approved_Note,
    Approved_Status = true;
;

db.ApprovalParties.Add(approvalParty);
db.SaveChanges();

【讨论】:

以上是关于更新数据表中的切割行并添加新记录 ASP.NET MVC的主要内容,如果未能解决你的问题,请参考以下文章

急切求助ASP.NET中的UPDATE数据库记录问题!

asp.net - 管理数据库表的 Web 前端 - 添加、删除、更新

ASP.NET MVC AspNetUserClaims 如何读取、写入和更新表中的数据?

ASP.Net 如果数据不存在则添加数据,如果数据存在则更新数据

如何使用ajax删除asp.net中的记录

从 ASP.NET Core 2.2 更新 SQL Server 中的上下文