经过的ASP.NET标识用户的模型错误的ID错误



我有一个非常令人困惑的问题...

我在该控制器上有一个名为" 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)

相关内容

  • 没有找到相关文章

最新更新