あなたの最初の質問に答えるために、あなたの質問自体に答えがあることを最初に伝えさせてください;)。'Shared' ... はい、それがキーワードです :) すべてのページにわたってユーザー コントロールの単一インスタンスをキャッシュに保持するには、@OutputCache ディレクティブで Shared='true' を設定します。これは、ユーザー コントロール レベル、つまり ascx ページで設定する必要があります。
ユーザー コントロール プロパティに基づいてユーザー コントロールをキャッシュするには、PartialCachingAttribute の varyByControls セクションでプロパティの完全修飾名を指定する必要があります。複数のプロパティがある場合は、セミコロンで区切る必要があります。
<%@ Control Language="C#" AutoEventWireup="true"
CodeFile="WebUserControl.ascx.cs"
Inherits="UC_WebUserControl" %>
<%@ OutputCache Duration="60"
VaryByControl="UC_WebUserControl.param1;UC_WebUserControl.param2"
VaryByParam="none" Shared="true" %>
または、ユーザー コントロールの PartialCache 属性を含めることもできます。
[PartialCaching(60, null, "UC_WebUserControl.param1;UC_WebUserControl.param2", null, true)]
public partial class UC_WebUserControl : System.Web.UI.UserControl
{
public string param1 { get; set; }
public string param2 { get; set; }
}
または、両方の値の組み合わせでコントロールをキャッシュする別の方法は次のとおりです。
[PartialCaching(60, null, "UC_WebUserControl.BothParams", null, true)]
public partial class UC_WebUserControl : System.Web.UI.UserControl
{
public string param1 { get; set; }
public string param2 { get; set; }
public string BothParams
{
get { return String.Concat(param1, param2); }
}
}
最後のパラメーター (true) は共有を指定します。期間は 60 で指定されます。 リンクを参照してください。方法: パラメーターに基づいてユーザー コントロールの複数のバージョンをキャッシュする
2 番目の Q に答えるには、実行時にユーザー コントロール変数のキャッシュ期間を作成するには、次の 2 つの方法があります。
ユーザー コントロール コード ビハインドで割り当てます。
[PartialCaching(60, null, "UC_WebUserControl.BothParams", null, true)]
public partial class WebUserControl1 : System.Web.UI.UserControl
{
...
protected void Page_Load(object sender, EventArgs e)
{
this.CachePolicy.Duration = new TimeSpan(0, 0, 60);
}
}
ユーザー コントロールの ID を使用して、ユーザー コントロールが参照されるページのコード ビハインドで割り当てることができます。
たとえば、aspx のユーザー コントロールが次の場合:
<mycontrols:control1 ID="ucControl1" runat="server" param1="15" param2="20" />
次に、aspx のコード ビハインドで、次のように記述します。
this.ucControl1.CachePolicy.Duration = new TimeSpan(0, 0, 60);
参考までに、ユーザー コントロールとページの両方がキャッシュされている場合: ページ出力キャッシュ期間がユーザー コントロールの期間よりも短い場合、ページの残りの部分が再生成された後でも、期間が終了するまでユーザー コントロールはキャッシュされます。リクエスト。たとえば、ページの出力キャッシュが 50 秒に設定され、ユーザー コントロールの出力キャッシュが 100 秒に設定されている場合、ユーザー コントロールは、残りのページが期限切れになる 2 回ごとに 1 回期限切れになります。