【问题标题】:Asp set role ModelState.IsValid is falseAsp 设置角色 ModelState.IsValid 为 false
【发布时间】:2016-10-12 04:47:15
【问题描述】:

您好)我是 asp 的新手,我正在使用 ApplicationUsers 类在我的项目中实现基于角色的安全性。所以我创建了页面,管理员可以在其中为用户设置角色,但我不能为用户设置另一个角色,因为在编辑发布方法 ModelState.IsValid 值为 false,因为它无法将字符串 id 值转换为角色。我尝试将值设置为 ModelState,但我不能,因为它没有设置器。请帮忙,我怎样才能用另一种方式解决它? 下面是我的代码...

    public ActionResult Edit(string id)
    {
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        ApplicationUser applicationUser = db.Users.Find(id);
        if (applicationUser == null)
        {
            return HttpNotFound();
        }
        var roles = db.Roles.Select(x => new SelectListItem { Text = x.Name, Value = x.Id }).ToArray();
        ViewBag.Roles = roles;
        return View(applicationUser);
    }

    // POST: ApplicationUsers/Edit/5
    // Чтобы защититься от атак чрезмерной передачи данных, включите определенные свойства, для которых следует установить привязку. Дополнительные 
    // сведения см. в статье http://go.microsoft.com/fwlink/?LinkId=317598.
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit([Bind(Include = "Id,Email,EmailConfirmed,PasswordHash,SecurityStamp,PhoneNumber,PhoneNumberConfirmed,TwoFactorEnabled,LockoutEndDateUtc,LockoutEnabled,AccessFailedCount,UserName,Roles")] ApplicationUser applicationUser)
    {
        if (ModelState.IsValid)
        {
            db.Entry(applicationUser).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        return View(applicationUser);
    }

并查看:

    <div class="form-group">
        @Html.LabelFor(model => model.Roles, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.DropDownListFor(x => x.Roles, (IEnumerable<SelectListItem>)ViewBag.Roles, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.Roles, "", new { @class = "text-danger" })
        </div>
    </div>

【问题讨论】:

  • 从您的代码看来,您正在发布 User 类(来自 Identity Framework)。我不会推荐这个。请改用 ViewModel,不要发送关键字段。我不希望客户端能够更新 PasswordHash。在您的视图模型中,您可以添加仅包含角色标识的角色标识集合。在您的 Edit 方法中,您可以更新您的身份模型。

标签: c# asp.net validation security roles


【解决方案1】:

尝试在开头{ 中的if (ModelState.IsValid) 之后设置一个断点,看看真正缺少什么问题是您尚未设置的另一个礼仪?可能是 ApplicationUser 对象中存在一个未设置的必需属性或数据类型不正确。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2019-05-20
  • 1970-01-01
  • 2010-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-16
  • 1970-01-01
相关资源
最近更新 更多