我有一个非常令人困惑的问题...
我在该控制器上有一个名为" UserController"的控制器,我列出了所有ASP.NET身份用户,以及一个用于编辑每个用户的链接。列出所有用户工作的视图也是如此,从而列出有关编辑用户的详细信息的视图。但是更新视图不起作用。传递给更新方法的模型不是应该的...当我查看传递的ID时,它与数据库中的任何用户都不匹配...我不知道为什么?
控制器
public ActionResult All()
{
var allUsers = _context.Users.ToList();
return View(allUsers);
}
public ActionResult Edit(string userId)
{
var user = _userManager.FindById(userId);
return View(user);
}
public ActionResult Update(ApplicationUser model)
{
if (ModelState.IsValid)
{
var user = _userManager.FindById(model.Id);
user.IsActive = model.IsActive;
_userManager.Update(model);
}
return View();
}
编辑视图
@using (Html.BeginForm("Update", "Users", FormMethod.Post, new { name = "form_section_search_id_mls" }))
{
<div class="row">
<div class="col-lg-12">
<div class="row">
<div class="col-lg-12">
<h3 class="title_contanier">Aktiv: </h3>
<div class="where-location">
@Html.CheckBoxFor(model => model.IsActive)
</div>
</div>
</div>
<!-- Begin .row -->
<div class="row">
<div class="col-lg-12">
<button type="submit" class="btn_submit_quick_search btn_submit_search pull-right" id="submitBtn" name="btn_submit_section_search_id_mls">Update user</button>
</div>
</div>
<!-- End .row -->
</div>
</div>
}
永远不要将实体模型返回视图。始终创建一个具有所需属性的视图模型,然后通过该对象传递。考虑以下示例:
public class UpdateUserViewModel
{
public string ID {get; set; }
// put properties that user could update
public bool IsActive {get; set; }
}
public ActionResult Edit(string id)
{
var user = _userManager.FindById(id);
return View(new UpdateUserViewModel
{
ID=user.Id,
IsActive=user.IsActive
});
}
public ActionResult Update(UpdateUserViewModel model)
{
if (ModelState.IsValid)
{
var user = _userManager.FindById(model.ID);
user.IsActive = model.IsActive;
_userManager.Update(user);
}
// rest of codes
}
在视图中,您还必须将user.ID
添加为隐藏的提交。
@Html.HiddenFor(model => model.ID)
@Html.CheckBoxFor(model => model.IsActive)