2011-02-08 104 views

答えて

3

独自のTempDataプロバイダを作成し、Cookieに格納することができます。 ASP.NET MVC Store TempData in Cookieを参照してください。隠れた入力を探し、オブジェクト/状態をハイドレーションし、各HTTPリクエストとの間でそれを持続させるベースクラスのコントローラを持つことができます。

TempDataは、2つのコントローラアクションの間だけ持続します。

編集:

あなたが同じ例を使用しても、ディスクへのDBにシリアライズ...か...プロバイダを書くことができます。その点で、セッションのカスタム置換全体をロールバックすることもできます。あなたは、セッションファクトリクラスを作成し、いくつかの静的コレクションのキーを介してカスタムセッションオブジェクトを格納します。上記のように、セッションキーをクッキーまたは隠し入力経由で追跡します。

+0

を私のオブジェクトのサイズはそれその後、巨大であれば良いのですsolution.But問題になります。クッキーは最大サイズ4kbを許します。その場合、良い解決策を教えてください。キャッシュプロバイダのようなVelocityを使用できますか? – Thanigainathan

+0

私はそれに対処する独自のクラスを作成することについてあなたが言ったことが好きです。私は独自のDictionary を作成しました。パブリッククラスでは、必要なときに 'using'ステートメントでインポートして名前空間を取り込めます。これは、TempData、ViewData、Session、およびCookiesがそうでない場合にも有効です。 – vapcguy

0

これは、MVCでもっと学ぶ非常に有用な質問でした。 TempDataがセッションを使用することをMicrosoftが知っていると仮定している理由のような質問が出ました。

4kbを超えるオブジェクトをアップロードする際に問題が発生しました。そのために私たちのアーキテクトは、そのオブジェクトを分割してクッキーの塊に保存することを提案しました。私はオブジェクトのシリアル化された文字列を分割するために、以下のブログのコードを使用しました。

http://lukencode.com/2010/04/21/split-string-into-array-of-chunks/

のでSaveTempData方法でクッキーを分割し、LoadTempDataで単一の文字列にそれらを収集。それはそれが問題を解決しました。

しかし、NVElocityのような分散型キャッシュ技術を使用することは常に優れています。

0

次のようになりますクラスを作成します。

public class GlobalStorage 
{ 
    public static Dictionary<string, object> Device = new Dictionary<string, object>(); 
} 

ストア:

GlobalStorage.Device.Add("myKey", mydata); 

取得:

string mydata = GlobalStorage.Device["myKey"].ToString();