あなたの最初のQに答えるには、まず自分の質問に答えがあることを教えてください。 '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によって指定され、実行時にユーザーコントロール変数のキャッシュ期間を作るために、あなたは二つの方法でそれを行うことができ、あなたの第二Qに答えるために、リンクHow to: Cache Multiple Versions of a User Control Based on Parameters
を参照してください:
背後にあるユーザーコントロールのコードでそれを割り当てます。
[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の背後にあるコードでは、次のように記述する必要があります
FYI
this.ucControl1.CachePolicy.Duration = new TimeSpan(0, 0, 60);
、ユーザーコントロールとページの両方がキャッシュされている場合:ページの場合出力キャッシュの持続時間がユーザーコントロールのキャッシュ時間よりも短い場合、要求のためにページの残りの部分が再生成された後であっても、ユーザーコントロールは期間が満了するまでキャッシュされます。たとえば、ページ出力キャッシングが50秒に設定され、ユーザーコントロールの出力キャッシングが100秒に設定されている場合、残りのページの有効期限が切れる2回ごとにユーザーコントロールが1回期限切れになります。
Response.Cacheは、ページレベルのキャッシュ用です。 PartialCaching属性を使用したコントロールレベルのキャッシュに興味があります。 – frankadelic
ポイントを取得しました...私はそれに応じて応答を編集しました:) –
また、あなたの例[PartialCaching(60、 "param1"、null、null、true)] ...これは "param1" QueryStringまたはPOSTパラメータ。それは私が望むものではありません。 "キャッシュされたコントロールは、コントロールインスタンスに設定されたプロパティに基づいて変化します。" – frankadelic