2015-07-16 4 views
0

У меня возникают проблемы с добавлением пользователей в роли в MVC 5. Когда я запускаю блок кода, я получаю «Ошибка проверки для одного или нескольких объектов. См.« Свойство EntityValidationErrors » для получения более подробной информации. «MVC 5 - Добавление пользователей к ошибке проверки роли

Тогда, когда я проверяю ошибки проверки сущности, они не очень полезны.

{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. Код Im использованием базируется этот учебник: 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; 
    } 
} 

EDIT: Я нашел проблему ... Поскольку EF использует имена, за которыми следует ID, как ключ по умолчанию, мое приложение постоянно путало идентификатор пользователя (который был номером id) с полем Идентификатор. Спасибо за помощь.

+0

что на View? –

+0

Жестокое редактирование и добавление ... – JacoJvV

+0

Где исключение попадает? Я использовал один и тот же учебник и код в одном из моих приложений, и он работает нормально. Таблицы Identity присутствуют в БД? –

ответ

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); 
     } 
    } 
} 
+0

Свойство: UserId Ошибка: поле UserId должно быть строкой или типом массива с максимальной длиной «13». Я думаю, что я знаю, что происходит ... Я добавил значение модели пользователя, которая является идентификационным номером – JacoJvV

+0

Отлично! разместите модель пользователя в своем вопросе – gastonmancini

+0

Я добавил его внизу. – JacoJvV

Смежные вопросы