asp.net – 如何LoadControl一个使用VaryByControl OutputCache
我有一个应该使用缓存的用户控件,使用VaryByControl. .ascx文件如下所示:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="TestControl.ascx.cs" Inherits="mynamespace.TestControl" %> <%@ OutputCache Duration="10" Shared="true" VaryByControl="Test" %> <p id="SomeText" runat="server">Nothing</p> 代码隐藏文件中的TestControl类具有int Test {…}属性和Page_Load()事件处理程序,该处理程序用以下内容填充SomeText段落: SomeText.InnerText = string.Format(@"Test={0} at {1}",Test,DateTime.Now) 我有一个.aspx文件看起来像这样: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TestPage.aspx.cs" Inherits="mynamespace.TestPage" %> <%@ Register TagPrefix="xxx" TagName="TestControl" Src="ControlsTestControl.ascx" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <xxx:TestControl Test="6" runat="server" /> <xxx:TestControl Test="7" runat="server" /> <hr /> <asp:PlaceHolder ID="Suport" runat="server" /> </body> </html> 两个< xxx:TestControl>标签正确加载TestControl的实例与测试设置为期望值,我可以刷新浏览器几次,我可以看到缓存正确地完成它的工作. 现在我要填写< asp:PlaceHolder ID =“Suport”/>使用一些TestControl实例,使用不同的Test值,这些实例都应该从正确的缓存中获益.我正在尝试使用LoadControl方法,但我找不到为Test属性指定值的方法.在加载.aspx页面的所有asp.net代码设法找到正确的缓存控件之后,我希望这样的方法存在.我得到的是PartialCachingControl的一个实例,没有初始化CachedControl,在运行时,渲染的TestControl显示Test的默认值为0. 这就是我的.aspx Page_Load()事件处理程序的样子: protected void Page_Load(object sender,EventArgs e) { PartialCachingControl tc = (PartialCachingControl) LoadControl(@"ControlsTestControl.ascx"); if (tc.CachedControl != null) ((TestControl)tc.CachedControl).Test = 67; Suport.Controls.Add(tc); } 编辑 我可以通过缓存整个页面来解决这个问题,但这似乎很奇怪我无法通过这种方式找到方法.特别是因为通过ASPX文件调用控件按预期工作(证明有一种方法). 编辑2 嗯,到目前为止还没有答案.我开始获得赏金,希望它得到更多的关注. 解决方法
我认为您误解了VarByControl属性,它不会告诉缓存更改控件上的属性,而是指示页面上控件的ID.
Here is the text from MSDN:
在您的情况下,您可以设置VaryByCustom而不是VaryByControl,并从Test-property-value生成缓存键,如果更改则更改它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – MVC3 – 向控制器添加一个文件夹?
- asp.net – 调用SMO服务器和数据库后清理
- asp.net-mvc-3 – 在MVC 3实体框架中添加多个到多个链接表的
- asp.net – 在将MVC和路由添加到WebForms项目后,IIS中的默认
- asp.net – 默认的Razor cshtml名称空间定义在哪里?
- asp.net-mvc – MVC 3 – 使用List类型属性绑定到复杂类型
- asp.net-core – ASP.NET 5中RegisterObject / QueueBackgr
- 发布asp.net网站给出“对象引用未设置为对象的实例.”错误
- asp.net-web-api – WebAPI 2.2不支持substringof函数
- asp.net-mvc – 将HttpRequestMessage转换为HttpRequest
- asp.net – 在使用“EF-Code First”时如何定义K
- asp.net-web-api – 基于参数类型重载Web api操作
- Tridion页面中的这些ASP.Net用户控件(.ascx)有什
- 在ASP.NET WebForms中通过HTTPS远程访问elmah.ax
- asp.net-mvc – 为什么我的样式表重定向到我的登
- asp.net-web-api – 无法使MVC4 WebApi包含JSON中
- Ajax请求过程中显示“进度”的简单实现
- asp.net – 如何为ValidateAntiForgeryToken选择
- asp.net – 无法加载类型’site._Default'[已
- asp.net-mvc-5 – Web API 2 OWIN承载令牌的目的