Невозможно привести SID UserID к базе данных - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь получить текущего пользователя из сеанса UserId, но получаю эту ошибку.'Невозможно привести объект типа' System.Int32 'к типу' Trinity.Models.tblUser '.'

Где я создаю идентификатор сеанса:

[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();
}

1 Ответ

1 голос
/ 03 апреля 2019

Вы храните только идентификатор (число), но когда вы читаете его обратно, вы ожидаете всего пользователя - это не сработает.Вместо этого вам нужно будет использовать идентификатор для перезагрузки пользователя:

var currentUserId = Session["UserID"];
var user = db.tblUsers.FirstOrDefault(x => x.Id == currentUserId);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...