0

私のApplicationUserをビューモデルに入れた後、私はそれを更新できません。私がApplicationUserを直接渡すと、それはうまく更新されます。私は何かが間違っていると思う複雑なviewmodelのエンティティを更新しますか?

<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> 

これは、次のとおりです。

public class EditViewModel 
{ 
    public List<ApplicationUser> users; 

    public ApplicationUser user; 

    public CSGOAccount CSGOAccount; 
} 

私のフォームでは、私はその後、ちょうどこのようなすべての私の性質上user.Propertyを呼び出す:

私のviewmodelは、このようになりますなぜ私は不確実です。私が使用して部分的見解を持っているので

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

が、私は複雑なのviewmodelを必要とする:私は何も値がモデルに渡されることはありませんという理論を持っている、ので、私のTryUpdateModelがtrueを返し、例外がキャッチされていないので、更新するためには何もありません別のモデル。ユーザーを更新するにはどうすればよいですか?

答えて

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

残念ながら、それは問題を解決しませんでした。他のアイデア? –

関連する問題