0

将我的ApplicationUser放入viewmodel之后,我无法更新它。如果我直接传递ApplicationUser,它会更新得很好。从复杂的viewmodel更新实体?

我的视图模型是这样的:

public class EditViewModel 
{ 
    public List<ApplicationUser> users; 

    public ApplicationUser user; 

    public CSGOAccount CSGOAccount; 
} 

在我的表单中我然后调用user.Property我的所有属性,就像这样:

<div class="form-group"> 
      <label asp-for="user.FirstName" class="control-label"></label> 
      <input asp-for="user.FirstName" class="form-control" /> 
      <span asp-validation-for="user.FirstName" class="text-danger"></span> 
</div> 

这是我觉得事情错了但我不确定为什么。我有一个理论,没有值永远不会传递到模型中,因此没有什么更新,因为我TryUpdateModel返回true,没有异常被捕获:

[HttpPost, ActionName("EditCoach")] 
    [ValidateAntiForgeryToken] 
    public async Task<IActionResult> EditCoachInfo(string id) 
    { 
     if (id == null) 
     { 
      return NotFound(); 
     } 

     var userToUpdate = await _context.Users 
      .Include(i => i.Coach) 
      .SingleOrDefaultAsync(i => i.Id == id); 
     if (await TryUpdateModelAsync<ApplicationUser>(
      userToUpdate, 
      "", 
      i => i.FirstName, i => i.LastName, i => i.Email, i => i.UserName, i => i.EmailConfirmed, i => i.PhoneNumber, i => i.PhoneNumberConfirmed, i => i.LockoutEnd, i => i.LockoutEnabled, i => i.AccessFailedCount, i => i.Coach)) 
      if (userToUpdate.Coach != null) 
      { 
       try 
       { 
        await _context.SaveChangesAsync(); 
        TempData["EditStatus"] = "Profilen blev opdateret"; 
       } 
       catch (DbUpdateException /* ex */) 
       { 
        //Log the error (uncomment ex variable name and write a log.) 
        TempData["EditStatus"] = "Fejl - Ikke i stand til at gemme ændringer. " + 
         "Prøv igen, eller kontakt din system adminstrator hvis problemet" + 
         "er vedvarende"; 
       } 
      } 

     EditViewModel model = new EditViewModel() 
     { 
      user = userToUpdate, 
     }; 

     return View(model); 
    } 

我所需要的复杂的视图模型,因为我有使用部分意见一个不同的模型。我如何更新我的用户?

回答

0

问题是你的EditViewModelpublic组成。 ASP.NET MVC中的默认模型绑定器需要公共设置器。试着改变你的视图模型到:

public class EditViewModel 
{ 
    public List<ApplicationUser> users { get; set} 

    public ApplicationUser user { get; set} 

    public CSGOAccount CSGOAccount { get; set} 
} 

,它应该工作。另外你的房产名称应该是帕斯卡套管

+0

不幸的是,它并没有解决问题。任何其他想法? –