【问题标题】:How to handle session data in ASP.NET MVC如何在 ASP.NET MVC 中处理会话数据
【发布时间】:2009-03-22 16:18:00
【问题描述】:

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

【问题讨论】:

  • [WebMethod] 不是仅适用于 ASP.NET Web 服务吗?
  • 您能否向我们展示从会话中访问变量的代码,因为您只展示了设置值的代码?另请记住,在您的问题的开头,您引用了一个名为 language_id 的变量,但您设置会话的代码引用了一个 languageid 变量(无下划线)。

标签: c# asp.net-mvc session


【解决方案1】:

与问题本身并不严格相关,但更多的是作为保持控制器(合理地)强类型和干净的一种方式,我还推荐一个 Session 外观,如在其中包装任何会话信息的类,以便您以一种很好的方式阅读和编写它。

示例:

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

【讨论】:

    【解决方案2】:

    它应该有效,但不是推荐的策略。也许会话状态在 IIS 或 ASP.NET 中已关闭?见this answer and its comments

    【讨论】:

      【解决方案3】:

      您可能还必须在 web.config 中启用会话。这里还有一篇关于会话状态和状态值的文章:

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

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-12-16
        • 2016-03-27
        • 1970-01-01
        • 2020-02-19
        • 1970-01-01
        • 2016-12-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多