如何使用 POST 值更新我的数据表。 ASP.NET

Posted

技术标签:

【中文标题】如何使用 POST 值更新我的数据表。 ASP.NET【英文标题】:How to update my data table with POST values. ASP.NET 【发布时间】:2021-04-20 14:47:44 【问题描述】:

我想更新我的数据库中的值。为了确保我的脚本正常工作并发送值,我创建了一个 POST 方法来检查并且值即将到来。

我现在的问题是方法中传入的值,如何在数据库中更新或保存我的值?

控制器:

    [HttpPost]
    public JsonResult EditPost(Programa_Cor_Info_Status statusData)
    
        Programa_Cor_Info_Status status = new Programa_Cor_Info_Status
        
            ID_Info = statusData.ID_Info,
            Status = statusData.Status,
            Obs = statusData.Obs,
        ;

        return Json(status, JsonRequestBehavior.AllowGet);
    

我尝试在我的控制器上使用 db.savechanges 但无济于事。 有人可以帮我举个例子吗?

谢谢

------------更新---------------------------------- -------

[HttpPost]
    public ActionResult EditPost(Programa_Cor_Info_Status statusData, int ID_Status)
    
        Programa_Cor_Info_Status status = new Programa_Cor_Info_Status
        
            ID_Info = statusData.ID_Info,
            Status = statusData.Status,
            Obs = statusData.Obs,
        ;

        var q = db.Programa_Cor_Info_Status.Where(m => m.ID_Info == ID_Status).FirstOrDefault();
        q.ID_Info = ID_Status;
        db.Entry(q).State = EntityState.Modified;
        db.SaveChanges();

        return Json(status, JsonRequestBehavior.AllowGet);
    

namespace Balu0._1.Models

using System;
using System.Collections.Generic;

public partial class Programa_Cor_Info_Status
 
    public int ID_Info  get; set; 
    public int ID_Programa  get; set; 
    public int ID_Linha_Cor  get; set; 
    public string Status  get; set; 
    public string Obs  get; set; 
 

【问题讨论】:

您的项目中有 EF Core dbcontext 吗? 是的@Sergey 我有 @mason 我已经用错误更新了我的帖子,尽管我拥有的唯一信息来自帖子。 【参考方案1】:

如果您还没有,请在您的视图中添加带有 ID_Info 值的隐藏模型字段。 将您的操作更改为:

    public ActionResult EditPost(Programa_Cor_Info_Status statusData)
    
            var existItem = db.Programa_Cor_Info_Status.Find(statusData.ID_Info);

// or if you dont have a  proper primary key you can try
 var existItem = db.Programa_Cor_Info_Status
                .Where( i=> i.ID_Info== statusData.ID_Info).FirstOrDefault();

                if (existItem != null)
                
                    
                db.Entry(existItem).CurrentValues.SetValues(statusData);
                var result = db.SaveChanges(); // if result==0 then error
                else ...error

        return Json(statusData, JsonRequestBehavior.AllowGet);
    

【讨论】:

System.ArgumentException: '传递的主键值的数量必须与实体上定义的主键值的数量相匹配。参数名称:keyValues'——这种情况下应该只有一个吧? 你有几个属性的复杂键?请显示您的 Programa_Cor_Info_Status 类。 我尝试更改为:var existsItem = db.Programa_Cor_Info_Status.Where(s => s.ID_Info == statusData.ID_Info); 我没有看到关键属性。这门课的关键是什么?这就是 Find 无法正常工作的原因。是的,那么在这种情况下你可以使用 Where 代替。 关键是ID_Info【参考方案2】:

感谢我已经得到的帮助!!!

db.Entry(status).State = EntityState.Modified;
        db.SaveChanges();
        return Json(status, JsonRequestBehavior.AllowGet);

【讨论】:

以上是关于如何使用 POST 值更新我的数据表。 ASP.NET的主要内容,如果未能解决你的问题,请参考以下文章

jQuery 更新隐藏的输入值,但不传递给 POST 变量

PHPUnit - 使用 $_POST 变量测试 MVC 控制器

如何通过ajax从表单发送POST数据数组?

PHP如何批量更新数据?急!!!

如何发出仅更新提供的字段的POST请求?

如果选中则如何更新数据库1的复选框值,如果未选中则更新为0?