【问题标题】:Store the value displayed in the EDIT menu and pass it as a parameter存储在 EDIT 菜单中显示的值并将其作为参数传递
【发布时间】:2021-05-21 08:07:31
【问题描述】:

我正在使用视图网格(MVC ASP.NET 和 C#),每次我为特定行单击 EDIT BUTTON 时,所有这些信息都会显示在不同的页面中,然后,我可以修改我想要的任何内容并保存更改。

问题是我想存储最初出现在编辑页面中的值以及新值,因为我想触发存储过程并将所有值作为参数传递(旧值和新值) .你明白我的意思吗? 举个例子:

这是我的控制器代码:

public ActionResult Edit(int id)
        {
            User user = dbContext.GetUserById(id);
            return View(user);
        }

        // POST: User/Edit/5
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit(int id, [Bind] User user)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    dbContext.UpdateUser(user);
                    return RedirectToAction("Index");
                }

                return View(dbContext);
            }
            catch
            {
                return View();
            }
        }

这就是我的 UpdateUser 函数的作用:

public void UpdateUser(User User)
{
    using (SqlConnection con = new SqlConnection(connectionString))
    {
        SqlCommand cmd = new SqlCommand("UPDATE_USER", con)
        {
            CommandType = System.Data.CommandType.StoredProcedure
        };

        cmd.Parameters.AddWithValue("@NAME", user.NAME);
        cmd.Parameters.AddWithValue("@LASTNAME", user.LASTNAME);
        cmd.Parameters.AddWithValue("@CODE", user.CODE);

        con.Open();
        cmd.ExecuteNonQuery();
        con.Close();
    }


}

编辑: 这是我的存储过程:

CREATE PROCEDURE UPDATE_USER
(
    @NAME varchar(255) = '',
    @LASTNAME varchar(255) = '',
    @CODE varchar(255) = '',
)
AS
BEGIN
    UPDATE MAPPINGTABLE
    SET NAME= @NAME,
    LASTNAME= @LASTNAME,
    CODE= @CODE
    WHERE CODE= @CODE;
END
GO

我想传递所有以前单击编辑时出现的值,我的意思是:我应该创建 3 个新参数,称为: OLD_NAME、OLD_LASTNAME、OLD_CODE。

【问题讨论】:

    标签: c# sql asp.net-mvc gridview datagrid


    【解决方案1】:

    将所有值作为参数传递(旧的和新的)

    虽然您需要存储过程中的旧值,但您可以在更新新值之前进行查询,而无需从控制器传递旧值。

    【讨论】:

    • 嗨,伙计,你好吗?对不起,我不完全理解你的观点。可以举个例子吗?
    • 如果我理解正确的话。您需要存储过程中的旧值。如果是这样,那么您可以添加查询 SELECT * FROM User Where ID = Your_Edit_ID 并将其值存储到 SQL 变量中。现在,您拥有旧值(由 db 查询获取)和新值(您已经从代码中传递
    • 每次我点击编辑按钮时,我都会看到一个可以修改数据的视图,然后点击保存,它会在数据库中更新。 (我正在触发一个存储过程)。所以,在这种情况下,我正在传递新值但是我想传递一些以前在我第一次单击编辑按钮时出现的值,你明白吗?
    • 我应该在哪里使用您的查询?我现在有点迷路了:/
    • 您需要将查询写入您的 UPDATE_USER 存储过程。并分享您对旧价值观的目的。
    【解决方案2】:
    public ActionResult Edit(int id = 0)
        {
    
            var Details = new ModelClass()
            {
                ModelClass = db.tablename.Where(a => a.id== id).ToList()
    
               
            };
            return View("Method name", Details );
    
            
        }
    

    并且在 MVC 视图中你的编辑按钮必须是

    @Html.ActionLink("Edit", "Edit", new { id = item.id}) |
    

    【讨论】:

    • 您好,谢谢您的回复!。这实际上在做什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-05
    • 2013-09-15
    • 2020-04-24
    • 1970-01-01
    相关资源
    最近更新 更多