use*_*648 4 session-cookies asp.net-mvc-3
我有一个双语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"];
}
}
Run Code Online (Sandbox Code Playgroud)
第二次进入"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());
}
Run Code Online (Sandbox Code Playgroud)
Dar*_*rov 13
你为什么HttpContext.Current在ASP.NET MVC应用程序中使用?永远不要使用它.即使在经典的ASP.NET webforms应用程序中,这也是邪恶的,但在ASP.NET MVC中,这是一个让这个漂亮的Web框架带来所有乐趣的灾难.
还要确保在尝试使用它之前测试会话中是否存在该值,因为我怀疑在您的情况下它不是HttpContext.Current.Sessionnull,但是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);
}
}
Run Code Online (Sandbox Code Playgroud)
所以问题的根源可能Session["MyCulture"]是在Session_Start方法中没有正确初始化.
| 归档时间: |
|
| 查看次数: |
17998 次 |
| 最近记录: |