我有一个双语MVC 3应用程序,我使用cookie和会话在Session_start
文件中的Global.aspx.cs
方法中保存“文化”,但在此之后,会话为空。
这是我的代码:
protected void Session_Start(object sender, EventArgs e)
{
HttpCookie aCookie = Request.Cookies["MyData"];
if (aCookie == null)
{
Session["MyCulture"] = "de-DE";
aCookie = new HttpCookie("MyData");
//aCookie.Value = Convert.ToString(Session["MyCulture"]);
aCookie["MyLang"] = "de-DE";
aCookie.Expires = System.DateTime.Now.AddDays(21);
Response.Cookies.Add(aCookie);
}
else
{
string s = aCookie["MyLang"];
HttpContext.Current.Session["MyCulture"] = aCookie["MyLang"];
}
}
第二次进入“else子句”因为cookie存在;在我的过滤器中,当它尝试设置culutre时,Session["MyCulture"]
为空。
public void OnActionExecuting(ActionExecutingContext filterContext)
{
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(HttpContext.Current.Session["MyCulture"].ToString());
System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture(HttpContext.Current.Session["MyCulture"].ToString());
}
答案 0 :(得分:13)
为什么在ASP.NET MVC应用程序中使用HttpContext.Current
? 从不使用它。即使在经典的ASP.NET webforms应用程序中,这也是邪恶的,但在ASP.NET MVC中,这是一个让这个漂亮的Web框架带来所有乐趣的灾难。
还要确保在尝试使用之前测试会话中是否存在该值,因为我怀疑在您的情况下,HttpContext.Current.Session
不是HttpContext.Current.Session["MyCulture"]
,而是public void OnActionExecuting(ActionExecutingContext filterContext)
{
var myCulture = filterContext.HttpContext.Session["MyCulture"] as string;
if (!string.IsNullOrEmpty(myCulture))
{
Thread.CurrentThread.CurrentUICulture = new CultureInfo(myCulture);
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(myCulture);
}
}
。所以:
Session["MyCulture"]
因此,问题的根源可能是Session_Start
方法未正确初始化{{1}}。