Asp.net core ASP.NET:通过“更新”按钮传递寄存器ID

Asp.net core ASP.NET:通过“更新”按钮传递寄存器ID,asp.net-core,http-post,Asp.net Core,Http Post,我正在构建这个视图,用户可以在其中编辑多个项目,并使用“更新”按钮一次保存一个项目 问题:我无法使“更新”按钮正常工作。以下是post方法: [HttpPost, ActionName("Test")] [ValidateAntiForgeryToken] public async Task<IActionResult> TestPost(int? id) { if (id == null) {

我正在构建这个视图,用户可以在其中编辑多个项目,并使用“更新”按钮一次保存一个项目

问题:我无法使“更新”按钮正常工作。以下是post方法:

    [HttpPost, ActionName("Test")]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> TestPost(int? id)
    {
        if (id == null)
        {
            return NotFound();
        }

        var machinetoUpdate = await _context.Machines
            .SingleOrDefaultAsync(s => s.Id == id);
        if (await TryUpdateModelAsync(
            machinetoUpdate,
            "",
            s => s.MchName, s => s.StoreID, s => s.PUnit, s => s.Status))
        {
            try
            {
                await _context.SaveChangesAsync();

            }
            catch (DbUpdateException)
            {
                ModelState.AddModelError("", "Unable to save changes. " +
                    "Try again, and if the problem persists, " +
                    "see your system administrator.");
            }
            return RedirectToAction("Test");
        }
        return View(machinetoUpdate);
    }
我在这方面有问题。ActionResult期望计算机的“id”已更新

public async Task<IActionResult> TestPost(int? id)
但是,因为我没有更新一个项目,我想我可以用更新按钮onclick发送“id”?此时按钮不起作用

这是每个按钮的代码:

                <div class="form-group">
                    <div class="col-md-offset-2 col-md-10">
                        <input id="@item.Id" type="submit" value="Update" class="btn btn-default" />
                    </div>
                </div> 
我怎样才能做到这一点


提前感谢

是的,您需要随请求发送id。您可以为此使用JavaScript,也可以为每行使用一个单独的表单,并设置不同的目标url。id可以是路由的一部分(如/123),也可以是查询字符串(如?123)或隐藏的表单字段。

Hello ssmith,谢谢您的回复。我是JS的乔恩·斯诺,所以我会尽量跳过这个。第二个选项,每行使用一个单独的表单,这意味着我必须重新执行视图并使用表单而不是表?如果“是”,您能给我一个例子,说明通过隐藏的表单字段传递“ID”会是什么样子吗?谢谢HTML表单是不可见的,因此它们是与表分开的概念。您只需将每组输入及其div元素等封装在一个。。。标签使用每个表单的action属性:action=/endpoint/1将每个表单指向特定于id的位置。对于隐藏表单,您只需为每个表单添加其中一个。