2017-08-17 47 views
0

我有一個形式編輯我的用戶信息:實體編輯不ASP.NET MVC保存核心

<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屬性有新的權利值,但DB實體沒有更新。我怎麼能解決這個問題?

+0

您的斷點是否碰到了行=>'_dbContext.SaveChanges();'? – CodeNotFound

+0

我不知道asp.core與mvc有多不同,但是您的操作不應該在其參數中使用「用戶」變量? – Tiramonium

+0

對於編輯,只需要等待reekeeS。 – TGarrett

回答

0

我們通常使用視圖模型作爲參數,並將發佈的值綁定到它。然後更新它的記錄庫。

[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); 
}