5

ビューの結果オブジェクトを自分でキャッシュすることにより、MVC 4 の OutputCache アクション フィルターの機能のほとんどを再作成しようとしています。OutputCache アクション フィルターを使用したくない理由は、AppFabric および部分ビューでは使用できないためです。部分ビューは常に MemoryCache に保存され、キャッシュされたオブジェクトをサーバー ファーム全体で使用したいと考えています。

私が抱えている最初の問題は

{"Type 'System.Web.Mvc.TempDataDictionary' cannot be serialized. 
Consider marking it with the DataContractAttribute attribute, and marking all of 
its members you want serialized with the DataMemberAttribute attribute.  
If the type is a collection, consider marking it with the 
CollectionDataContractAttribute.  See the Microsoft .NET Framework documentation for  
other supported types."}

これは、本質的に最後にビューを返すために何か他のものをキャッシュする必要があるかどうか疑問に思います。ビューを再作成する代わりに何をキャッシュする必要があるか、またはサーバー ファームで部分ビューをキャッシュするための別のアプローチを知っている人はいますか? これにはサードパーティのプラグインを使用したくありません。

ありがとう

更新:次のように、部分ビューの文字列表現のキャッシュを開始しました。

using (StringWriter sw = new StringWriter())
        {
            ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, "ViewName");
            ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
            viewResult.View.Render(viewContext, sw);
            view = sw.GetStringBuilder().ToString();
        }

これにより、キャッシュ内の文字列を取得してアクションのコンテンツとして返すことが簡単になりました。私はまだ他の提案やこれを行うためのより良い方法を探しています。

4

1 に答える 1