[英]Update entity from complex viewmodel?
将我的ApplicationUser放入一个视图模型后,我将无法更新它。 如果我直接通过ApplicationUser,它会更新就好。
我的视图模型如下所示:
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);
}
我需要复杂的viewmodel,因为我有使用不同模型的部分视图。 如何更新我的用户?
问题是您的EditViewModel
由public
字段组成。 ASP.NET MVC中的默认modelbinder需要公共设置器。 尝试将您的视图模型更改为:
public class EditViewModel
{
public List<ApplicationUser> users { get; set}
public ApplicationUser user { get; set}
public CSGOAccount CSGOAccount { get; set}
}
它应该工作。 另外,您的财产名称应为Pascal Cased
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.