一个动作中的会话变量很好,接下来是null

时间:2015-12-10 13:35:31

标签: asp.net-mvc-5

我有一个简单的应用程序。当用户登录时,会创建会话变量并将其重定向到另一个控制器,该控制器从数据库中提取一些信息。我需要将它存储到会话变量然后将其返回到视图。初始部分很好,它返回它,我看到了信息。但是,当我尝试创建搜索查询时,它返回会话为空,即使我从未清除它。

public ActionResult ShowCourses()
{
    if (Session["Username"] != null)
    {
        string Username = Session["Username"].ToString();

        using (DefaultConnection db = new DefaultConnection())
        {
            var model = from c in db.Courses
                        where c.Username == Username
                        select c;

            Session["Courses"] = model.ToList();
            var Courses = Session["Courses"];
            return View(Courses);
        }
    }
    else
    {
        return RedirectToAction("Login", "Users");
    }
}

但是当我尝试运行搜索查询以遍历会话时,它会返回Courses为空。问题是coursesQuery返回null并且我不确定原因。

public ActionResult SearchCourses(string query)
{
    if (Session["Username"] != null)
    {
        var coursesQuery = Session["Courses"] as IEnumerable<Course>;

        if (coursesQuery != null)
        {
            // Do Something
        }
    }
}

1 个答案:

答案 0 :(得分:1)

在设置为Session之前,您在课程集合中执行了.ToList()

试试这个。阅读时请使用List<Course>

if (Session["Courses"] != null)
{
  var coursesQuery = (List<Course>) Session["Courses"];
}