我目前正在寻找一种更好的解决方案。我希望有人可以帮助我。
我正在创建一个网页,我正在尝试使用Cookie手动设置网站的文化。
我有2个按钮
<asp:ImageButton runat="server" ID="LanguageNL" OnCommand="Language_Command" CommandName="Language" CommandArgument="nl" ImageUrl="~/Images/Flags/nl.png" style="margin-left: 0px" />
<asp:ImageButton runat="server" ID="LanguageEN" OnCommand="Language_Command" CommandName="Language" CommandArgument="en" ImageUrl="~/Images/Flags/gb.png" style="margin-left: 5px" />
protected void Language_Command(object sender, CommandEventArgs e)
{
Response.Write("Do Command");
HttpCookie cookie = new HttpCookie(e.CommandName);
cookie.Value = e.CommandArgument.ToString();
cookie.Expires = DateTime.MaxValue;
Response.Cookies.Add(cookie);
Response.Redirect(Request.RawUrl);
}
并设置页面文化我正在使用像这样的IHttpModule
using System;
using System.Globalization;
using System.Threading;
using System.Web;
public class DartsGhentAuthorization : IHttpModule
{
public DartsGhentAuthorization() { }
public void Init(HttpApplication context)
{
context.BeginRequest += Context_BeginRequest;
}
private void Context_BeginRequest(object sender, EventArgs e)
{
HttpApplication application = (HttpApplication)sender;
application.Response.Write("Begin Request");
HttpCookie languageCookie = application.Request.Cookies["Language"];
CultureInfo culture = new CultureInfo("nl");
if (languageCookie != null)
culture = new CultureInfo(languageCookie.Value);
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;
}
public void Dispose() { }
}
现在我遇到的问题发生在页面生命周期中。 当我按下按钮更改语言时,页面会刷新 首先调用HttpModule,然后才会触发页面加载和按钮命令。这意味着我首先寻找文化,然后才在一个页面请求中设置语言。为了解决我的问题,我添加了一个response.redirect来重新加载我的页面,以便语言按预期更改,但有没有办法更好地做到这一点?
我正在使用HttpModule,因为我试图不在重载中设置页面文化。此外,我正在创建自己的页面授权,因此我需要httpmodule以进行更多网站集成。
答案 0 :(得分:0)
你可以在你的asp按钮上添加一些黑客来帮助你清理你的cookie,以便在请求开始之前你没有包含该语言的cookie所以它会设置新的 这是示例
<asp:ImageButton runat="server" ID="LanguageNL" OnClientClick="ClearCookie();" OnCommand="Language_Command" CommandName="Language" CommandArgument="nl" ImageUrl="~/Images/Flags/nl.png" style="margin-left: 0px" />
<asp:ImageButton runat="server" OnClientClick="ClearCookie();" ID="LanguageEN" OnCommand="Language_Command" CommandName="Language" CommandArgument="en" ImageUrl="~/Images/Flags/gb.png" style="margin-left: 5px" />
并在您的JavaScript添加功能清除Cookie
function ClearCookie(){
//Do Clear Cookie
}