2009-02-20 67 views
6

我在我的应用程序“header.ascx”中创建了一个用户控件,我将一个selectedMenu属性放到了这个控件上,控件在该控件上选择指定的selectedMenu值。假设,我已经通过值“家”或“搜索”,然后它会选择(突出显示)搜索菜单。在ASP.NET中缓存用户控件?

我想缓存此控制,当selectedMenu的属性值的变化则只有缓存将在别的刷新应该拿起从高速缓存控制?

是否可以缓存在asp.net用户控件?我正在使用ASP.NET 2.0(C#)

回答

5

当然你可以!它被称为“片段缓存”。这是链接到Quickstarts pageMS Knowledge base。另外,Google。在ASP.NET

+0

lol +1 for google!你可以添加此链接到一个关于它的好问题http://stackoverflow.com/questions/568837/caching-a-user-control-in-asp-net – Matt 2011-08-22 10:45:53

6

用户控件缓存被称为fragment caching

,如果它在高速缓存中找到你无法通过设置在控件的属性改变缓存因为控制是不会真正创建:它是通过添加一个OutputCache指令到你的页面的顶部做。如果您尝试访问缓存后面的代码中的控件,它将为空。

是决定控件是否应被缓存的条件或没有的东西,你可以通过查看当前请求确定?如果是,您可以使用输出缓存指令的varybycustom属性(http://msdn.microsoft.com/en-us/library/system.web.ui.partialcachingattribute.varybycustom.aspx)。你可以把任何你想要的字符串作为参数,然后当缓存被评估时,GetVaryByCustomString() method from Global.asxa将被调用,并且你可以把控制是否被缓存的逻辑放在那里。

+0

@ Heephant,在这种情况下,我怀疑他们可能可能使用VaryByControl。 – LukeH 2009-02-20 09:48:05

+0

是的,它会是VaryByControl。 – Cerebrus 2009-02-20 10:35:21

1

我不认为这是一个好主意,缓存控制本身:

  • 当控件创建的第一次,它在其他其父页面的引用。
  • 当您从缓存中检索控件时,这些引用不再存在。

我认为更好的方法是缓存控件正在使用的数据。 ASP.NET在页面生命周期中创建了如此多的控件,缓存这一个控件实际上并没有改善任何东西。

那么,在年底一个愚蠢的问题:这是控制的瓶颈?你真的需要缓存吗?

0

总结

使用VaryByCustom是指

1-再次生成控件。
2-在缓存中有多个版本的控件。这将在定制条件见面时使用。

这只有在控件需要花费大量时间来构建时才有用,而且我们有足够数量的缓存版本以避免浪费内存,并且应用程序需要访问控件属性(当它被缓存“或null” )。

但如果自定义条件取决于控件属性本身,它将不会很好。我无法访问它,它是空的。

例如我想写类似 如果(在国家列表中的默认选择的值不是美国) 然后重建和Cache(给它一个不同的字符串)

否则不

而其他对象试图访问国家列表时,它将检查为空,并将国家下拉列表设置为美国。

数据卡廷将完成这项工作。这是唯一的方法。

谁同意?

感谢您的时间