我想为访问该网站的每个用户创建一个Cookie并为其设置默认值。 cookie是用英语启动网站,以后用户可以根据自己的喜好更改语言。
我在global.asax
中这样做 HttpCookie myCookie = new HttpCookie("Language");
myCookie.Value = "EN";
myCookie.Expires = DateTime.Now.AddDays(1d);
HttpContext.Current.Response.Cookies.Add(myCookie);
我尝试在以下事件中使用上述代码,
Application_Start
Application_BeginRequest
Session_Start
在上述所有三个事件中,为每个页面加载将cookie值设置为“EN”。不应该是这种情况。当用户选择其他语言时,必须将语言设置为HttpCookie(“语言”)。
答案 0 :(得分:1)
你应该首先检查cookie是否已经定义..是否已经设置你不需要再设置它..当用户选择一种新语言时,那时你才应该重新定义它..一般算法,操作顺序如下
- 如果用户正在更改语言
- 将应用程序的语言更改为所选的
- 将其保存到Cookie
- 如果先前的设置已保存在cookie中,则为else
- 将应用程序的语言更改为保留的
- 然后是新访问
- 将应用程序的语言更改为默认语言
- 将Cookie设置为默认值
这应该在每个请求中进行评估..因为用户可以在任何页面更改语言。
所以放置代码的正确事件应该是Application_BeginRequest
这是你的代码..我在CurrentUICulture
中保存语言参数,因此不仅可以在应用程序的任何地方查询,而且框架也使用它来自定义格式..也是我假设用户可以传递一个名为lang
的参数,该参数包含他想要的语言。
void Application_BeginRequest(object sender, EventArgs e)
{
//if user is changing language
if(!String.IsNullOrEmpty(HttpContext.Current.Request["lang"]))
{
String sLang = HttpContext.Current.Request["lang"] as String;
//change the language of the application to the chosen
System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo(sLang);
//save it to cookie
HttpCookie myCookie = new HttpCookie("Language");
myCookie.Value = sLang;
myCookie.Expires = DateTime.Now.AddDays(1d);
HttpContext.Current.Response.Cookies.Add(myCookie);
}
//setting as been preserved in cookie
else if(HttpContext.Current.Request.Cookies["Language"])
{
//change the language of the application to the preserved
String sLang = HttpContext.Current.Request.Cookies["lang"].value as String;
System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo(sLang);
}
else//new visit
{
//change the language of the application to the default
System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-us");
//set cookie to the default
HttpCookie myCookie = new HttpCookie("Language");
myCookie.Value = "en-us";
myCookie.Expires = DateTime.Now.AddDays(1d);
HttpContext.Current.Response.Cookies.Add(myCookie);
}
}
答案 1 :(得分:0)
您需要编写代码以将Cookie值更新为用户选择的内容。当您说“当用户选择其他语言”时,无论何时,您需要从集合中检索该cookie,请在那里更新cookie值。只有这样,它才能以你需要的方式工作。