Asp设置角色ModelState.IsValid为false

时间:2016-06-11 08:05:45

标签: c# asp.net validation security roles

嗨那里)我是asp的新手,我正在使用ApplicationUsers类在我的项目中实现基于角色的安全性。所以我创建了一个页面,其中admin可以为用户设置角色,但是我无法为用户设置另一个角色,因为在编辑post方法时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>

1 个答案:

答案 0 :(得分:0)

尝试在开场if (ModelState.IsValid)的{​​{1}}之后设置一个突破点,看看真正缺少问题的是你还没有设定的另一个优点吗?可能是ApplicationUser对象中有一个必需的适当项未设置或数据类型不正确。