Установите культуру в HttpModule с помощью файлов cookie

В настоящее время я ищу лучшее решение для того, что у меня есть сейчас. Я надеюсь, что кто-нибудь может мне помочь с этим.

Я создаю веб-страницу и пытаюсь вручную настроить культуру веб-сайта с помощью файлов 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 для дополнительной интеграции с веб-сайтом.


person Davy Quyo    schedule 01.05.2017    source источник


Ответы (1)


вы можете добавить какой-нибудь взлом на свою кнопку asp с помощью javascript, чтобы очистить файл 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
}
person Hasan Elsherbiny    schedule 01.05.2017
comment
httpmodule установит культуру по умолчанию, которая равна NL, если cookie не существует. это будет отлично работать, если я захочу переключиться на NL, но не наоборот. Но это может быть идея установить файлы cookie с помощью javascript, а затем обновить страницу - person Davy Quyo; 01.05.2017