我在向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字段混淆。感谢您的帮助。
答案 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);
}
}
}