【问题标题】:Unable to cast Session UserID to database无法将会话用户 ID 转换为数据库
【发布时间】:2019-04-03 08:23:02
【问题描述】:

我试图从会话 UserId 中获取当前用户,但出现此错误。 '无法将'System.Int32'类型的对象转换为'Trinity.Models.tblUser'类型。'

我在哪里创建会话 ID:

[HttpPost]
public ActionResult Authorise(tblUser user)
{
    using (var db = new TrinityEntities())
    {
        var userEmail = db.tblUsers.FirstOrDefault(x => x.Email == user.Email);
        var userPassword = db.tblUsers.FirstOrDefault(y => y.Password == user.Password);

        //check login incorrect
        if (userEmail == null || userPassword == null)
        {
            ViewBag.LoginIncorrect = "E-mail or Password not correct";
            return View("Index", user);
        }
        else
        {
            Session["UserID"] = userEmail.Id;
            return RedirectToAction("Index", "Home");
        }
    }
}

我得到错误的地方:

public ActionResult Index()
{
    if (Session["UserID"] == null)
    {
        return Redirect("/");
    }

    var currentUser = (Models.tblUser) Session["UserID"];

    using (var db = new Models.ChatContext())
    {
        ViewBag.allUsers = db.Users.Where(u => u.FirstName != currentUser.FirstName).ToList();
    }

    ViewBag.currentUser = currentUser;

    return View();
}

【问题讨论】:

  • 所以你输入了一个int,你希望它在另一边显示为tblUser
  • 我正在尝试获取当前用户的 UserId,以使他不显示为可能与之聊天的人。
  • 我认为你没有理解我的评论。
  • “所以你输入一个 int 并且你期望它作为一个 tblUser 出来” 我希望它通过 Sessions UserID @PatrickHofman 来获取用户
  • 但是你输入了一个数字。

标签: c# asp.net sql-server asp.net-mvc


【解决方案1】:

您只是存储了 ID(一个数字),但是当您读回它时,您期待的是整个用户 - 这是行不通的。相反,您需要使用 ID 重新加载用户:

var currentUserId = Session["UserID"];
var user = db.tblUsers.FirstOrDefault(x => x.Id == currentUserId);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-30
    • 2011-09-18
    • 1970-01-01
    • 2013-12-19
    • 2015-10-27
    • 2013-04-08
    • 1970-01-01
    • 2013-02-16
    相关资源
    最近更新 更多