2012-04-03 39 views
1

我有一個包含大量來自數據庫的產品列表的頁面。並在同一頁上我有一些登錄用戶的信息。此信息位於UserControl中。 (這是不可能把清單的產品在用戶控件:))用戶控件沒有OutputCache

所以我會將此設置爲我的網頁頂部的緩存頁面

<%@ OutputCache Duration="200" 
    Location="Any" 
    VaryByParam="none" 
%> 

但由於該緩存整個頁面,用戶信息的UserControl也被緩存。 是否可以禁用僅用於UserControl的緩存,但不能用於頁面的其餘部分?

我看了一下Substitution Blocks。但似乎這隻適用於文本?

感謝,

文森特

回答

4

MSDN

爲了使您能夠緩存的頁面,但動態代替部分內容, 您可以使用ASP.NET緩存後替換。通過後置緩存 替換,整個頁面輸出緩存,並標記爲免除緩存的特定部分 。在廣告橫幅示例中, AdRotator控件允許您利用後緩存 替換,以便爲每個用戶動態創建的廣告和爲每個頁面刷新的 。

有三種方式來實現緩存後替換:

  • 聲明的方式,使用替代控制。

  • 以編程方式使用Substitution控制API。

  • 隱式地使用AdRotator控件。

我認爲最好的辦法是使用Substitution控制。對於這樣的Substitution控件添加到您的網頁,並設置其屬性MethodName

<asp:Substitution runat="server" MethodName="GetUserInfo"></asp:substitution> 

現在添加GetUserInfo方法到您的網頁。該Substitution控制調用此方法來獲取用戶信息:

public static string GetUserInfo(HttpContext context) 
{ 
    // return rendered user control 
} 

的事情是使你的用戶控件爲一個字符串。爲此,您可以使用Scott Guthrie編寫的Tip/Trick: Cool UI Templating Technique to use with ASP.NET AJAX for non-UpdatePanel scenarios文章中提出的技術。在這種情況下,使用戶控件只是使用類似的東西:

return ViewManager.RenderView("UserInfo.ascx"); 
+0

完美!謝謝 :) – Vinzcent 2012-04-03 12:10:05

0

放置在一個Session產品列表。現在從應用程序的任何地方訪問它。

YourColectionClass variable = Session["Sessionvariable"] == null ? 
      ClassObject.DatabaseFunction(Params) : 
      (YourColectionClass)Session["Sessionvariable"]; 

現在Cache它的VaryByparam的基礎上。 VaryByParam可以有用戶標識。

相關問題