MVC 5 - 将用户添加到角色验证错误

时间:2015-07-16 15:28:16

标签: c# asp.net-mvc validation asp.net-mvc-4

我在向MVC 5中的角色添加用户时遇到了问题。 当我运行代码块时,我得到“一个或多个实体的验证失败。有关详细信息,请参阅'EntityValidationErrors'属性。

然后当我检查实体验证错误时,它们不是很有帮助。

{System.Data.Entity.Validation.DbEntityValidationResult}是我得到的。

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult RoleAddToUser(string UserName, string RoleName)
    {
        using (var context = new ApplicationDbContext())
        {

            //Gets the user details
            ApplicationUser user = context.Users.Where(u => u.UserName.Equals(UserName, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();
            //Add the user to a role, using id ...
            this.UserManager.AddToRole(user.Id, RoleName);

            ViewBag.ResultMessage = "Role created successfully !";

            // prepopulate roles for the view dropdown
            var list = context.Roles.OrderBy(r => r.Name).ToList().Select(rr => new SelectListItem { Value = rr.Name.ToString(), Text = rr.Name }).ToList();
            ViewBag.Roles = list;

            return View("ManageUserRoles");
        }      
    } 

这是UserManager:

        public ApplicationUserManager UserManager
    {
        get
        {
            return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
        }
        private set
        {
            _userManager = value;
        }
    }

我现在非常沮丧,因为这是我第一次在MVC中担任角色,到目前为止,这并不是一次很好的体验。

我希望这里有人可以帮我找到解决问题的方法。

P.S。我使用的代码基于本教程:Working with Roles in ASP.NET Identity for MVC

这是观点:

@Html.AntiForgeryToken()
@Html.ValidationSummary(true)

<p>
    Username : @Html.TextBox("UserName")
    Role Name: @Html.DropDownList("RoleName", (IEnumerable<SelectListItem>)ViewBag.Roles, "Select ...")

</p>

<input type="submit" value="Save" />

这是默认用户类,添加了属性:

public class ApplicationUser : IdentityUser
{
    [Required]
    [MaxLength(13)]
    [MinLength(13)]
    [Key]
    public string IDNumber { get; set; }


    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
    {
        // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
        var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
        // Add custom user claims here
        return userIdentity;
    }
}

编辑:我发现问题...因为EF使用名称后跟ID作为默认密钥,我的应用程序一直将UserID(这是一个id号)与Id字段混淆。感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

为什么不抓住异常DbEntityValidationResult并检查验证错误?

在那里你可以查看哪个属性错误以及原因。如果任何数据不满足模型属性规则(例如所需的约束),则可能会出现此错误。

尝试添加以下声明...

catch (DbEntityValidationException ex)
{
    foreach (var errors in ex.EntityValidationErrors)
    {
        foreach (var error in errors.ValidationErrors)
        {
            Trace.TraceInformation("Property: {0} Error: {1}", error.PropertyName, error.ErrorMessage);
        }
    }
}