0

我目前正在寻找更好的解决方案来解决我现在拥有的问题。我希望有人可以帮助我解决这个问题。

我正在创建一个网页,我正在尝试使用 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 来进行更多网站集成。

4

1 回答 1

0

您可以在 javascript 的帮助下向您的 asp 按钮添加一些 hack 以清除您的 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
}
于 2017-05-01T10:35:05.717 回答