假设我想在会话中存储一个名为language_id
的变量。我想我可能会做以下事情:
public class CountryController : Controller
{
[WebMethod(EnableSession = true)]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResultChangelangue(FormCollection form)
{
Session["current_language"] = form["languageid"];
return View();
}
}
但是当我检查会话时,它总是为空。怎么会?我在哪里可以找到有关ASP.NET MVC中处理会话的一些信息?
答案 0 :(得分:12)
与问题本身没有严格关联,但更多的是作为一种保持控制器(合理地)强类型和清洁的方式,我还建议使用类似于会话的会话外观,其中包含任何会话信息,以便你以一种很好的方式阅读和写作。
示例:强>
public static class SessionFacade
{
public static string CurrentLanguage
{
get
{
//Simply returns, but you could check for a null
//and initialise it with a default value accordingly...
return HttpContext.Current.Session["current_language"].ToString();
}
set
{
HttpContext.Current.Session["current_language"] = value;
}
}
}
<强>用法:强>
public ActionResultChangelangue(FormCollection form)
{
SessionFacade.CurrentLanguage = form["languageid"];
return View();
}
答案 1 :(得分:1)
它应该有效,但不是推荐的策略。可能在IIS或ASP.NET中关闭了会话状态?请参阅this answer and its comments。
答案 2 :(得分:0)
您可能还必须在web.config中启用会话。此处还有一篇关于会话状态和状态值的文章:
希望这有帮助。