我有一个存储各种信息的控制器(即 FormID、QuestionAnswerList 等)。目前我将它们存储在 Controller.Session 中并且工作正常。
我想将一些逻辑分解到一个单独的类(即RulesController)中,我可以在其中执行某些检查等,但是当我尝试引用那里的会话时,它是空的。很明显,会话仅在特定控制器的上下文中保持有效,但是每个人都在做什么呢?
我想这很常见,您想在不同的控制器中共享某些“全局”变量,最佳实践是什么?
这是我的代码的一部分:
在我的 BaseController 类中:
public List<QuestionAnswer> QuestionAnswers
{
get
{
if (Session["QuestionAnswers"] == null)
{
List<QuestionAnswer> qAnswers = qaRepository.GetQuestionAnswers(CurrentSection, UserSmartFormID);
Session["QuestionAnswers"] = qAnswers;
return qAnswers;
}
else
{
return (List<QuestionAnswer>)Session["QuestionAnswers"];
}
}
set
{
Session["QuestionAnswers"] = value;
}
}
在我的第一个控制器(派生自 BaseController)中:
QuestionAnswers = qaRepository.GetQuestionAnswers(CurrentSection, UserSmartFormID);
我单步执行代码,上面的语句执行得很好,设置了 Session["QuestionAnswers"],但是当我尝试从下面的另一个控制器获取时,Session["QuestionAnswers"] 为空!
我的第二个控制器(也源自 BaseController):
List<QuestionAnswer> currentList = (List<QuestionAnswer>)QuestionAnswers;
上面的行失败了!看起来 Session 对象本身为空(不仅仅是 Session["QuestionAnswers"])