2011-09-09 10 views
0

私はASP.NET MVCブログを持っています。クッキーが使用されるクライアントのタイムゾーンで投稿とコメントの日付を表示するために、クッキーにクライアントのタイムゾーンオフセットが含まれています。サーバーは要求を受け取ると、cookieからオフセット値を読み取り、それに応じてすべての日付を変更してからブラウザに送信します。私の質問はどのように日付の調整のためにどこからでもアクセスできるように、リクエストごとにグローバル変数にクッキーを保存する方法です。asp.net mvcのグローバル変数にクッキー値を格納する

答えて

0

あなたは

session["MyVarName"] = mycookievalue 

たびに、あなたがセッションに必要なすべての時間にアクセスすることができますクッキーを使用したくない場合は、セッション変数を使用することができます。

eカスタムモデルバインダーを実装して、セッションの値をモデルにバインドできるように考えることもできます。 (例えば、クラスUserSettingsModel)

1

一般的に、より多くのコントローラとアクションは、外部から提供される値に依存しますが、テスト可能で堅牢なユニットが多くなります。私は、このよう

まずそれを行うその後、タイムゾーン

public class ClientTimeZoneSettings 
{ 
    public string TimeZoneName {get; set;} // or whatever 
} 

の設定を保持しているモデルを作成し、モデルバインダーを作成します。そのモデルバインダーは、Global.asaxの

におけるモデルバインダーは、ボイドのApplication_Start(){ AreaRegistration.RegisterAllAreas()を保護することをクッキー

public class ClientTimeZoneSettingsModelBinder : DefaultModelBinder 
{ 
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
     if (controllerContext.RequestContext.HttpContext.Request.Cookies.AllKeys.Contains("timeZoneName")) 
     { 
      bindingContext.Model = new ClientTimeZoneSettings {TimeZoneName = controllerContext.RequestContext.HttpContext.Request.Cookies["timeZoneName"]; } 
     } 

    } 
} 

レジスタから値を抽出するために使用します。

RegisterGlobalFilters(GlobalFilters.Filters); 
RegisterRoutes(RouteTable.Routes); 


ModelBinders.Binders.Add(typeof(ClientTimeZoneSettings), new ClientTimeZoneSettingsModelBinder()); 

}

メインポイント。大幅に単純なアプローチ:

nugetからMvcFuturesをインストールし、それらの設定を必要とするすべてのあなたの行動では、直接パラメータとして

public ActionResult ShowComments(ClientTimeZoneSettings settings) 
{ 
    // use settings 
} 

UPDATEをClientTimeZoneSettingsを使用することができます。モデルバインディング時に自動的に値のクッキーを検査するCookieValueProviderFactoryが含まれています。これを使用するには、単にValueProviderFactories

protected void Application_Start() 
{ 
    AreaRegistration.RegisterAllAreas(); 

    RegisterGlobalFilters(GlobalFilters.Filters); 
    RegisterRoutes(RouteTable.Routes); 

    ValueProviderFactories.Factories.Add(new CookieValueProviderFactory()); 
} 

に追加してから、クッキー名にaccortingあなたのパラメータに名前を付ける

関連する問題