2013-05-02 67 views
0

我正在设计一个ASP.net MVC4应用程序,我需要获取当前的用户ID,以便将它作为组的所有者ID保存在我的数据库的表中。获取userId的登录用户返回null

这是我使用的代码:

public ActionResult CreateGroup(string groupName, string description) 
{ 
     if (Request.IsAuthenticated) 
     { 
      Group group = new Group(); 
      Random random = new Random(); 
      int groupId = random.Next(1, 2147483647); 

      using (CodeShareEntities conn = new CodeShareEntities()) 
      { 
       try 
       { 
         int ownerId = (int) Membership.GetUser(System.Web.HttpContext.Current.User.Identity.Name).ProviderUserKey; 

         group.GroupId = groupId; 
         group.GroupName = groupName; 
         group.Description = description; 
         group.OwnerId = ownerId; 

         conn.Group.Add(group); 
         conn.SaveChanges(); 
        } 
        catch (Exception e) 
        { 
         ModelState.AddModelError("", e.Message); 
        } 
       } 

       return View("ThisGroup"); 
      } 
      else 
      { 
      return View("../Shared/NotLoggedIn"); 
    } 

我得到一个NullReferenceException在这条线:

虽然用户名是否正确返回。可能是什么问题?我对web应用程序仍然很陌生,我真的无法弄清楚这一点!

感谢

回答

0

除非你使用的是自定义的成员资格提供,我相信ProvidersUserKey是一个GUID。

(Guid) Membership.GetUser(System.Web.HttpContext.Current.User.Identity.Name).ProviderUserKey; 
+0

什么是Guid?以及如何将其转换为整数,以便我可以将其保存在数据库中?感谢您的回答 – Bernice 2013-05-02 19:04:13

+0

尝试与Guid,但仍然没有工作..同样的例外:/ – Bernice 2013-05-02 19:10:08

0

试试这个code.it是工作,如果你使用aspnet会员提供。

MembershipUser user = Membership.GetUser(HttpContext.User.Identity.Name); 
    Guid guid = (Guid)user.ProviderUserKey; 
0

这是检索当前登录用户ID的助手方法。

请注意,ASP.Net会员使用Guid作为ID(而不是整数)。

public static Guid? UserId 
{ 
    get 
    { 
     try 
     { 
      Guid? userId = null; 
      if (HttpContext.Current != null && 
       HttpContext.Current.User.Identity.IsAuthenticated) 
      { 
       MembershipUser currentUser = Membership.GetUser(); 
       userId = (Guid)currentUser.ProviderUserKey; 
      } 
      return userId; 
     } 
     catch 
     { 
      return null; 
     } 
    } 
} 

注:要检查返回UserIdnullgroup.OwnerIdGuid过;否则,你的保存语句将失败。

+0

感谢您的答案:) ..所以没有办法将guid转换为整数?我的数据库字段OwnerId是int类型,sql server没有guid类型 – Bernice 2013-05-04 10:02:12

+0

如果您想将OwnerId作为Users表的UserId的外键,则OwnerId必须是Guid。否则,你不能在它们之间建立关系。这里是示例http://stackoverflow.com/a/15745316/296861 – Win 2013-05-04 18:37:30