2017-05-01 5 views
0

Je suis actuellement à la recherche d'une meilleure solution à ce que j'ai maintenant. J'espère que quelqu'un pourrait m'aider sur celui-ci.Définir la culture dans HttpModule avec des cookies

Je crée une page Web et j'essaye de placer la culture du site Web manuellement avec des biscuits.

J'ai 2 boutons

<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); 
    } 

et pour définir la culture de la page J'utilise un IHttpModule comme celui-ci

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() { } 
} 

Maintenant, le problème que je suis confronté arrive dans le cycle de vie de la page. Lorsque j'appuie sur un bouton pour changer la langue, la page se rafraîchit mais d'abord le HttpModule est appelé et seulement après que le chargement de la page, puis les commandes de bouton sont déclenchées. Ce qui signifie que je cherche d'abord la culture et seulement plus tard, je définis la langue dans une demande de page. Pour résoudre mon problème, j'ai ajouté un response.redirect pour recharger ma page afin que la langue soit changée comme prévu mais y a-t-il un moyen de faire mieux? J'utilise HttpModule parce que j'essaye de ne pas mettre la culture de page dans une surcharge. Aussi, je crée ma propre autorisation de page, donc j'ai besoin du httpmodule pour plus d'intégration de site web.

Répondre

0

vous pouvez ajouter un peu de bidouille à votre bouton asp avec l'aide de javascript pour effacer votre cookie afin que avant que la demande commence, vous avez aucun cookie contenant la langue il établira le nouveau ici est Exemple

<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" /> 

et JavaScript dans votre Ajouter une fonction Effacer Cookie

function ClearCookie(){ 
//Do Clear Cookie 
} 
+0

le HttpModule définira la culture par défaut qui est NL si aucun cookie existe. Cela fonctionnerait très bien si je voulais passer à NL mais pas l'inverse. Mais il pourrait être une idée de mettre les cookies avec javascript, puis faire une page d'actualisation –