Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Asp.net MVC 2缓存_C#_Asp.net Mvc_Linq To Sql - Fatal编程技术网

C# Asp.net MVC 2缓存

C# Asp.net MVC 2缓存,c#,asp.net-mvc,linq-to-sql,C#,Asp.net Mvc,Linq To Sql,我目前正在用c#中的asp.net mvc 2开发一个网站。我从未在MVC中使用过缓存功能,我想将其应用到用户配置文件页面。此页面上的内容很少更改,唯一需要实时显示的部分是用户最近发布的帖子列表。(我使用linq to sql从数据库加载数据) 我需要一些关于我应该使用什么缓存技术以及如何实现它的建议 更新: 下面的Xandy解决方案几乎可以工作,只是我不能传递数据。我将如何使用?Html.RenderPartial(“UserPosts”,ViewData[“UserPosts”])ASP.N

我目前正在用c#中的asp.net mvc 2开发一个网站。我从未在MVC中使用过缓存功能,我想将其应用到用户配置文件页面。此页面上的内容很少更改,唯一需要实时显示的部分是用户最近发布的帖子列表。(我使用linq to sql从数据库加载数据)

我需要一些关于我应该使用什么缓存技术以及如何实现它的建议

更新: 下面的Xandy解决方案几乎可以工作,只是我不能传递数据。我将如何使用?Html.RenderPartial(“UserPosts”,ViewData[“UserPosts”])

ASP.Net具有

这将适用于MVC2

菲尔·哈克不再在MVC2工作了


在StackOverflow,我们将html片段构建为文本,并使用

缓存它们,正如其他答案所述,甜甜圈缓存“某种程度上”在MVC中工作

我不推荐它-相反,我会提供一个替代方案:

您有一个用户配置文件的视图,我们称之为“UserProfile.aspx

现在在这个视图中,您有了一堆HTML,包括“最近的文章”部分

现在,我假设这是用户的最后10篇帖子

我要做的是将这个HTML/部分放到一个局部视图中,并通过一个单独的操作方法,即aPartialViewResult:

public class UserProfileController
{
   [HttpGet]
   [OutputCache (Duration=60)]
   public ActionResult Index() // core user details
   {
       var userProfileModel = somewhere.GetSomething();
       return View(userProfileModel);
   }

   [HttpGet]
   public PartialViewResult DisplayRecentPosts(User user)
   {
       var recentPosts = somewhere.GetRecentPosts(user);
       return PartialViewResult(recentPosts);
   }
}
使用jQuery渲染局部视图:

<script type="text/javascript">
   $(function() {
    $.get(
        "/User/DisplayRecentPosts",
        user, // get from the Model binding
        function (data) { $("#target").html(data) } // target div for partial
     );
   });
</script>

$(函数(){
美元(
“/User/DisplayRecentPosts”,
用户,//从模型绑定中获取
函数(数据){$(“#target”).html(数据)}//部分的目标div
);
});
通过这种方式,您可以最大化核心详细信息的OutputCache(Index()),但不会缓存最近的帖子。(也可以使用非常小的缓存周期)

呈现分部的jQuery方法不同于RenderPartial,因为这样可以直接从控制器提供HTML,因此可以相应地控制输出缓存


最终结果非常类似于甜甜圈缓存(页面的部分被缓存,其他部分没有)。

是的,我也看到了。但是如何在缓存页面的同时不缓存部分内容呢?下一页将讨论部分缓存。这仍然是MVC2中的首选方法吗?Phil Haccked有一篇文章谈到了这一点,请参阅我编辑的答案。如何将ViewData传递给用户控件?有可能吗?还有人知道答案吗?对于我的更新?您需要使用RenderPartial()的第四个重载。请尝试:
Html.RenderPartial(“UserPosts.ascx”,Model.UserPosts,new ViewDataDictionary{Model=Model.UserPosts}
。那么没有javascript的客户端呢?OP是否规定了这一要求?