【问题标题】:ASP.NET CORE MVC CRUD operation. Create form doesn't work anymoreASP.NET CORE MVC CRUD 操作。创建表单不再起作用
【发布时间】:2021-07-19 03:11:21
【问题描述】:

我目前正在为网站处理我的 CRUD 操作。在所附图片上,您可以看到我将创建表单用于 2 个目的。 1.创建用户和2编辑用户。我的查询做得很好,但是当我添加一个隐藏的 id 来让某个用户进行编辑时。我不能再按创建用户了,因为我在图 1 中传递了一段代码。(我选择的行)

但是,当我删除这段代码时,我可以创建一个用户,但是当我在删除这段代码时尝试编辑用户时,它只是编辑用户,然后使用编辑后的内容创建一个新用户。有谁知道如何解决这个问题?

附言我制作了控制器的屏幕截图和出错的代码。

亲切的问候,

Sem

[出错的代码段][1] [用户控制器][2] [用户 控制器][3] [数据传输对象][4] [CreateOrUpdate 查询/功能][5]

[1]:https://i.stack.imgur.com/5XxDe.jpg[2]: https://i.stack.imgur.com/s5pqh.jpg [3]: https://i.stack.imgur.com/2vLXM.jpg [4]: https://i.stack.imgur.com/R2OBn.jpg [5]: https://i.stack.imgur.com/ADyv5.jpg

【问题讨论】:

    标签: asp.net asp.net-mvc asp.net-core c#-3.0 razor-pages


    【解决方案1】:

    根据您的屏幕截图,您正在从 UI 调用相同的操作方法,在这种情况下,您需要在操作方法中验证 id 以查看它是否有效然后更新它,否则它将被添加。场景第一次加载页面的 id 将为空,第二次加载时它将具有 id 并且您可以使用相同的 id 进行编辑。

    希望这能解决你的问题?

    【讨论】:

    • 所以我需要在控制器中更改一些东西?
    • @SemdeWilde 是的
    • 我应该能够通过验证我仅用于显示表单的 Create 操作方法上的 id 来解决此问题吗?
    • @SemdeWilde 是的,因为您为这两个目的使用了相同的表单。
    • 关注这篇文章,c-sharpcorner.com/UploadFile/2072a9/crud-operations-in-mvc。它会帮助你
    【解决方案2】:

    首先,您可以使用上方工具栏中的“{}”复制您的代码,这样其他人可以更方便地测试您的代码。

    但是当我在删除这段代码时尝试编辑用户时,它只是编辑用户,然后使用编辑后的内容创建一个新用户。

    您可以检查数据库是否有传递的模型,如果id存在,则创建一个,如果不存在,则删除旧的并创建这个新的。

    这是一个带有 linq 的演示,你可以检查逻辑并将我的代码修改为你的:

    public async Task<IActionResult> ProcessCreate(UsersDto user)
        {
            if (!_context.UsersDtos.Any(x => x.Id == user.Id))  //if not exist, create one directly
            {
                _context.Add(user);
                await _context.SaveChangesAsync();
            }
            else {               //else, delete old one and create new one       
                var therow = _context.UsersDtos.Where(x => x.Id == user.Id).FirstOrDefault();
                _context.Remove(therow);
                _context.Add(user);
                await _context.SaveChangesAsync();
            }          
            return RedirectToAction("Index");
        }
    

    在Create.cshtml中,可以显示id:

    <form method="post" asp-action="ProcessCreate">
    <div class="form-group" hidden>
        <label asp-for="Id" class="control-label"></label>
        <input asp-for="Id" class="form-control" />
        <span asp-validation-for="Id" class="text-danger"></span>
    </div>
    <div class="form-group">
        <label asp-for="First_name" class="control-label"></label>
        <input asp-for="First_name" class="form-control" />
        <span asp-validation-for="First_name" class="text-danger"></span>
    </div>
    //.......
    <div class="form-group">
        <input type="submit" value="CreateOrEdit" class="btn btn-primary" />
    </div>
    

    结果:

    【讨论】:

    • 您对我的帖子有任何问题吗?如果您有任何疑问,请随时提问。如果有帮助,可以set it as an answer,这样可以帮助更多的人。
    猜你喜欢
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    • 2018-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多