使用webusercontrol获取输出缓存以在ASP.net中工作
我有一个带有公共int属性SelectedCatID的webusercontrol.我在其他页面和其他控件中使用此控件,如下所示:
<NewStore:LeftMenuLinks runat="server" SelectedCatID="<%#CatIDToSelect%>" /> 如何根据SelectedCatID输出缓存此控件?我尝试过的一切都失败了. 我得到的最接近的是让它进行缓存,但它在SelectedCatID上没有变化,只有缓存过期才会选择相同的菜单项.没有缓存,控件按预期工作. 解决方法
我弄清楚为什么你最初使用的VaryByControls方法不起作用.可悲的是你从你的问题中编辑了它,所以我对此的研究只需要进入博客文章.更新:有问题的博文:
http://tabeokatech.blogspot.be/2014/09/outputcache-on-user-controls.html.
它的长短不过是VaryByControls是VaryByParams的简写,并且对属性没有任何作用:它只查看POST值.它曾经用于具有静态值的属性这一事实似乎是一个错误–VaryByControls中的任何字符串都会使该部分工作.这个问题的公认答案是错误的:Vary by control properties using PartialCaching in ASP.NET. 没有内置的方法可以根据控件属性值而变化. 这无论如何都没有意义,因为需要创建用户控件以具有属性值,并且您希望避免创建它们,而是缓存其呈现的标记 – 如果为缓存标记提供缓存,则缓存用户控件字段在代码隐藏中为空他们. 至于使它工作,我看到两个选项: >如果每页只有1个usercontrol,则可以使用VaryByCustom方法.为了简单起见,您可以编写一个返回该页面属性值的接口,并在托管用户控件的每个页面上实现它,例如: interface INumberProvider { int GetNumber(); } // and the page: public partial class _Default : Page,INumberProvider { public int GetNumber() { return this.SomeNumberPropertyOrWhatever; } ... 在Global.asax中,您将当前处理程序转换为INumberProvider并获取数字: public override string GetVaryByCustomString(HttpContext context,string custom) { if (custom == "INumberProvider") { var page = context.CurrentHandler as INumberProvider; if (page != null) { return page.GetNumber().ToString(); } } return base.GetVaryByCustomString(context,custom); } 在您的控制中,您显然会添加: OutputCache Duration =“180”VaryByCustom =“INumberProvider”VaryByParam =“None”Shared =“true” 如果每页只有一个用户控件,那应该非常简单.如果每页需要多个用户控件,那么运气不好:>通过编写自定义WebControl,围绕用户控件构建自己的包装器.添加所需的属性,捕获呈现的用户控件的输出,并使用包含SelectedCatID的键将其插入到HttpContext.Current.Cache中.基本上编写自己的自定义PartialCachingControl.还有选项3:>决定缓存毕竟不重要 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ASP.NET 中 .aspx 与.cs文件的关系
- asp.net – 更新面板PostBackTrigger,更新进度不显示
- asp.net-mvc – 获取视图名称,其中ViewResult.ViewName为单
- ASP.NET MVC SEO URL
- 从ASP.NET导出的word文件中添加页眉/页脚
- asp.net-mvc – RedirectToAction导致在ASP.NET MVC 3中“路
- asp.net-mvc – MVC / Unity – 如何将依赖项注入自定义Fil
- asp.net – 如何在Quartz.Net中处理应用程序关闭
- 无法启动任何ASP.NET项目
- 如何利用ASP.net IIS 7.5中的浏览器缓存
- asp.net – ClientScriptManager.GetPostBackEve
- asp.net core 使用 AccessControlHelper 控制访问
- selectlist – asp.net MVC 4.0下拉列表中的选定
- asp.net-mvc-3 – MVC配置授权角色值和强类型角色
- .net – 代码背后的文字
- asp.net – 如何禁用viewstate的aspx页面?
- asp.net-mvc-4 – .NET MVC4 SimpleMembership错
- asp.net-mvc – 静态文件请求正在ASP.NET MVC3中
- asp.net – 自定义日期colmn telerik网格的过滤器
- asp.net – 自定义部分的Web配置转换