【问题标题】:How get Session info or current culture info on non page behind wrapper class?如何在包装类后面的非页面上获取会话信息或当前文化信息?
【发布时间】:2011-11-07 05:39:20
【问题描述】:

我有 Main.Master 页面,其中包含设置 CultureInfo 并将其存储在会话中的按钮:

protected void RU_Click(object sender, ImageClickEventArgs e)
{
    Session["MyCulture"] = CultureInfo.CreateSpecificCulture("ru-Ru");
    Server.Transfer(Request.Url.LocalPath);     
}

protected void USA_Click(object sender, ImageClickEventArgs e)
{
    Session["MyCulture"] = CultureInfo.CreateSpecificCulture("en-AU");
    Server.Transfer(Request.Url.LocalPath);  
}

我在包装类后面写了我的非页面,在这个类中我需要从会话中获取这个文化。我尝试在这门课上获取当前的文化信息,如下所示:

(CultureInfo)HttpContext.Current.Session["MyCulture"]

HttpContext.Current 为空!如何解决这个问题???

【问题讨论】:

  • 这段代码很小.....请多解释一下。这是不可能的
  • 这个“包装类后面的非页面”在哪里?
  • 我有一个项目,用于在我的类解决方案中创建 C# 类库 (.dll) (.NET Framework 3.5)。在一节课上,我尝试获取当前的文化信息。我怎样才能得到它??

标签: c# asp.net


【解决方案1】:

如果您的类没有从 Page 或 UserControl 继承,那么您可能应该将当前 Context 作为参数传递给需要使用它的方法。

另外,如果你的类是一个 ASHX 页面,那么你需要指出该页面实现了System.Web.SessionState.IRequiresSessionState

【讨论】:

  • 不完全正确,但不会造成伤害
  • 好点。我已经更新了答案以表明这是您可能应该做的事情(这样该类就不会对其执行的上下文做出任何假设)。
【解决方案2】:

我假设访问 HttpContent.Current 的代码在 ASP.NET 线程的独立线程上运行。

如果是这种情况,那么HttpContent.Current 将不可用,因此最好将任何依赖对象(例如当前文化)传递给新线程,而不是依赖于访问当前的 HttpContext 对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-23
    • 2012-03-31
    • 2021-03-10
    • 2017-10-02
    • 2016-09-25
    • 2014-11-22
    • 1970-01-01
    相关资源
    最近更新 更多