如何在ASP.NET MVC中处理会话数据

时间:2009-03-22 16:18:00

标签: c# asp.net-mvc session

假设我想在会话中存储一个名为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中处理会话的一些信息?

3 个答案:

答案 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中启用会话。此处还有一篇关于会话状态和状态值的文章:

http://www.davidhayden.com/blog/dave/archive/2008/02/06/ASPNETMVCFrameworkSessionStateStateValueWCSF.aspx

希望这有帮助。