你如何使用User.Identity.GetUserId();

时间:2017-01-28 02:07:27

标签: c# asp.net visual-studio linq

我正在使用Visual Studio而且我是新手。我正在尝试执行以下操作:

  • 用户登录并点击名为" subject"
  • 的页面
  • 检查用户是否已登录(如果没有,请显示"您必须登录...")
  • 如果用户已登录,请从“主题”表中获取他们的信息(我应该注意我的表格没有结构化#34;正确",因为此时我只是在测试/学习一些东西)。
  • 如果在"导师"下的主题表中值为0 - 返回带有消息的页面"您拍摄的主题列表"否则,返回"您教授的主题列表"。

我已经工作了好几个小时而且我一直在犯错误。主要是我想我不明白User.Identity.GetUserId();工作,因为我试图比较它返回到subject表中的userID的值,因为我假设它从AspNetUsers表中获取ID,所以我尝试匹配它们。当我尝试访问主题页面时出现错误:"其他信息:DbComparisonExpression需要具有可比类型的参数。"它们都是相同的类型(nvarchar),在此之前它们是不同的数据类型,我一直遇到比较问题,这就是为什么我改变它们来测试它。

所以无论如何我认为问题是我不知道User.Identity.GetUserId();工作,究竟是什么回报。我正在假设它从AspNetUsers表返回UserId,不知道为什么,但可能是为什么我会得到比较错误。

这是我的代码的一部分:

 SubjectsContext1 db = new SubjectsContext1(); 

            if (User.Identity.IsAuthenticated) { //check if user is logged in


                var userInfo = User.Identity.GetUserId(); //get logged in user info

                //find logged in user info from Subjects table (errors here)

                var userData = (from c in db.Subjects
                            where c.studentID.Equals(userInfo) 
                            select c).FirstOrDefault();
                var email = userData.email;
                var tutorStatus = userData.tutor;


               if(tutorStatus == 0)
                {
                    ViewBag.Message = "A list of the subjects you take.";
                    return View();
                }
                else
                {
                    ViewBag.Message = "A list of the subjects you teach.";
                    return View();
                }

            }
            else
            {
                ViewBag.Message = "You must be logged in to view this page!";
                return View();
            }

我只是想了解如何获取登录用户的信息,以便从我制作的主题表中获取他们的信息。

1 个答案:

答案 0 :(得分:2)

  

我不知道User.Identity.GetUserId();工作,到底是什么   返回

它从您的身份用户表(在您的案例中为dbo.AspNetUsers表)中返回登录用户的用户ID,该表是字符串。

确保在dbo.Students表中为StudentId使用相同的数据类型(字符串),从SQL Server中的“表设计”重新确认。