2011-02-04 10 views
0

私のシナリオの背景を教えてください。私は、多言語サイトを持って、私の文化がデータベースに保存され、あなたが自分のサイトに来た場合public bool Active { get; set; }このカルチャーを毎回確認するのは避けてください。

  1. あるブラウザのロシアの文化を言うことができますプロパティを持って、それが私のサイト上でサポートされていません。だから私は文化を "se"(または何でも)に設定する必要があります。

  2. サポートされているカルチャーで自分のサイトに来たが、アクティブでない場合は、デフォルトの "se"(または何でも)に設定する必要があります。

ここで私のoverride IHttpHandler GetHttpHandlerメソッドでこのチェックを簡単に行うことができます。物事は、サイトがサイトに電話をかけるたびにデータベースへの呼び出しをしたくないということです。私の考えでは、そのチェックを減らすためのセッション["firstVisit"]をしていますが、私のシナリオではそれを言うべきなので、どうすればいいのかわかりません。 not set to an instance of an object ["firstVisit"]私の質問はどのように私はこれを処理するのですか?そして、私はこれについて何か他の選択肢がありますか?

私の考えは、なぜ私は、私はちょうどセッション

答えて

0

使用グローバルを避けるためにprotected void Application_Start()にチェックをやってしまったことを考えていなかったこの

protected override IHttpHandler GetHttpHandler(System.Web.Routing.RequestContext requestContext) 
     {    
      String culture = requestContext.RouteData.Values["culture"].ToString(); 

      if (HttpContext.Current.Session["firstVisit"].ToString() == string.Empty) 
      { 
       //do the check 
      } 

      var ci = new CultureInfo(culture); 
      Thread.CurrentThread.CurrentUICulture = ci; 
      Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(ci.Name); 
      return base.GetHttpHandler(requestContext); 
     } 

EDIT

Dohのようなものです.asax.cs:

protected void Session_Start(object sender, EventArgs e) 

このメソッドは、s最初に婚約が作成されます。あなたはチェックをして、セッションであなたの言語情報を詰め込み、あなたのサイトとのユーザーのやりとりを通じてセッションが生きている間、あなたの言語情報を詰め込むことができます。

+0

ありがとうございました。私はApplication_Start()を使用することを考えなかった理由を知りません。 –

+0

アプリケーションの開始はおそらくあなたが望むものではありません。これは、アプリケーション全体が起動されたときに一度だけ呼び出されます。ユーザーが最初にサイトにアクセスしたとき(session_start)を確認したかったようです。 – Sean

+0

ああ、申し訳ありませんが、私は誤解しました。ルックアップを高速化するために、すべての言語をキャッシュする必要があります。 Application_Startそれはそれです:) – Sean