我试图通过自己缓存视图结果对象来重新创建 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();
}
这使得在缓存中检索字符串并将其作为操作中的内容返回变得很容易。我仍在寻找其他建议或更好的方法来做到这一点。