【问题标题】:Entity edit doesn't save in ASP.NET MVC Core实体编辑不保存在 ASP.NET MVC Core 中
【发布时间】:2017-08-17 19:37:24
【问题描述】:

我有一个用于编辑我的用户信息的表单:

<form asp-action="EditUser"  asp-route-returnurl="@ViewData["ReturnUrl"]">
    <div class="form-horizontal">
        <hr />
        <div asp-validation-summary="ModelOnly" class="text-danger"></div>
        <input type="hidden" asp-for="User.Id" />

        <div class="form-group">
            <label asp-for="User.Name" class="col-md-2 control-label"></label>
            <div class="col-md-10">
                <input asp-for="User.Name" class="form-control" />
                <span asp-validation-for="User.Name" class="text-danger"></span>
            </div>
        </div>
        <div class="form-group">
            <label asp-for="User.Surname" class="col-md-2 control-label"></label>
            <div class="col-md-10">
                <input asp-for="User.Surname" class="form-control" />
                <span asp-validation-for="User.Surname" class="text-danger"></span>
            </div>
        </div>
    </div>
</form>

这是我的 MVC 操作:

    [HttpPost, ActionName("EditUser")]
    [Authorize(Roles = Roles.Root + "," + Roles.Manager)]
    public async Task<IActionResult> Edit(string id, string returnUrl = null)
    {
        if (ModelState.IsValid)
        {
            try
            {
                var studentToUpdate = await _dbContext.Users.SingleOrDefaultAsync(s => s.Id == id);

                // Try to update user from DB by edited values from form
                if (await TryUpdateModelAsync<ApplicationUser>(studentToUpdate, "User.",
                    s => s.Surname, u => u.Name))
                    _dbContext.SaveChanges();

                return Redirect(returnUrl);
            }
      }
}

在调试中我可以看到Request.Form 属性中有新的正确值,但数据库实体没有更新。我该如何解决?

【问题讨论】:

  • 你的断点是否命中了行 => _dbContext.SaveChanges();?
  • 我不知道 asp.core 与 mvc 有何不同,但您的操作不应该期望其参数中包含 User 变量吗?
  • 编辑只需要一个 await reekeeS。

标签: c# asp.net-mvc asp.net-core http-post


【解决方案1】:

我们通常使用视图模型作为参数,并将发布的值绑定到它。然后根据它更新记录。

[HttpPost, ActionName("EditUser")]
[Authorize(Roles = Roles.Root + "," + Roles.Manager)]
public async Task<IActionResult> Edit(string id, EditViewModel model, 
    string returnUrl = null)
{
    if (ModelState.IsValid)
    {

        var studentToUpdate = await _dbContext.Users.SingleOrDefaultAsync(s => s.Id == id);
        if (studentToUpdate != null)
        {
            studentToUpdate.Surname = model.Surname;
            ... Other properties

            await _dbContext.SaveChangesAsync();
        }
        return Redirect(returnUrl);
    }
    return View(model);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 2015-06-01
    • 1970-01-01
    相关资源
    最近更新 更多