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

不幸的是,它並沒有解決問題。任何其他想法? –