2015-01-10 2 views
0

Я использовал следующий учебник http://www.dotnetfunda.com/articles/show/2898/working-with-roles-in-aspnet-identity-for-mvc, чтобы добавить роли в мое приложение. Мне удалось добавить роль для пользователя, который хранится в моей базе данных. Однако я не могу указать роли, которые были назначены этому пользователю. Я получаю следующую ошибку:MVC возвращает роли пользователей в представление

Ссылка на объект не установлена ​​в экземпляр объекта.

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

Мой контроллер выглядит следующим образом

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult GetRoles(string UserName) 
    { 
     ApplicationDbContext context = new ApplicationDbContext(); 
     if (!string.IsNullOrWhiteSpace(UserName)) 
     { 
      ApplicationUser user = context.Users.Where(u => u.UserName.Equals(UserName, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault(); 
      var account = new AccountController(); 
      //this.UserManager.GetRoles(user.Id); 
      ViewBag.RolesForThisUser = account.UserManager.GetRoles(user.Id); 

      // prepopulat 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"); 
    } 

и мой взгляд

<hr /> 
<h3>Get Roles for a User</h3> 
@using (Html.BeginForm("GetRoles", "Account")) 
{ 
    @Html.AntiForgeryToken() 
    <p> 
     Username : @Html.TextBox("UserName") 
     <input type="submit" value="Get Roles for this User" /> 
    </p> 
} 

@if (ViewBag.RolesForThisUser != null) 
{ 
    <div style="background-color:yellow;"> 
    <h3>Roles for this user </h3> 
    <ol> 
     @foreach (string s in ViewBag.RolesForThisUser) 
     { 
      <li>@s</li> 
     } 
    </ol> 
</div> 
} 
+0

Возможный дубликат [MVC5 Account Controller null reference exception exception] (http://stackoverflow.com/questions/27750918/mvc5-account-controller-null-reference-exception) –

ответ

0

Вы можете попробовать это: В классе контроллера, вставить:

using System.Threading.Tasks; 
using Microsoft.AspNet.Identity.Owin; 

Далее, действие контроллера:

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public async Task<ActionResult> GetRoles(string UserName) 
    { 
     using (ApplicationDbContext context = new ApplicationDbContext()) 
     { 
      if (!string.IsNullOrWhiteSpace(UserName)) 
      { 

       ApplicationUser user = context.Users.Where(u => u.UserName.Equals(UserName, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault(); 

       //var account = new AccountController(); 
       ApplicationUserManager UserManager = HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>(); 
       //this.UserManager.GetRoles(user.Id); 

       ViewBag.RolesForThisUser = await UserManager.GetRolesAsync(user.Id); 
       // prepopulat 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"); 
     } 
    } 

Вид ОК. Пожалуйста, дайте мне знать, если вы будете работать для вас.

0

Я думаю, что вы выбрали плохой учебник, если вы читаете комментарии в конце поста все у людей есть аналогичная проблема. Кстати, эта статья смущена. Несколько раз создается экземпляр AccountController для доступа к экземпляру объекта, созданного на этом контроллере (UserManager), навсегда привязывая эту реализацию к существованию по умолчанию AccountController.

Я оставляю несколько хороших уроков

ASP.NET MVC 5 Identity: Extending and Modifying Roles

ASP.NET Identity 2.0: Customizing Users and Roles

Extending Identity Accounts and Implementing Role-Based Authentication in ASP.NET MVC 5

0

Это звучит знакомо, и я заметил, этот вопрос в другой день. Я не буду отмечать его как точный дубликат, так как я не совсем уверен, что это так .. но вполне возможно, что вы и этот человек следовали одному и тому же учебнику.

MVC5 Account Controller null reference exception

EDIT: При дальнейшем рассмотрении, она выглядит точно так же вопрос .. поэтому я пошел вперед и проголосовали его как дубликат.

0

Спасибо всем за ответы. Мне удалось вернуть роли пользователя, используя следующее.

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult GetRoles(string UserName) 
    { 
     ApplicationDbContext context = new ApplicationDbContext(); 
     if (!string.IsNullOrWhiteSpace(UserName)) 
     { 
      ApplicationUser user = context.Users.Where(u => u.UserName.Equals(UserName, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault(); 

      var ReturnRole = this.UserManager.GetRoles(user.Id); 
      // ViewBag.RolesForThisUser = account.UserManager.GetRoles(user.Id); 
      ViewBag.RolesForThisUser = ReturnRole; 
      // prepopulat 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"); 
    } 

выше сообщение от Stefan Влад также будет работать :) Спасибо Stefan

Все, что мне нужно сейчас, чтобы удалить роль от пользователя, здесь надеется!

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