Để trả lời câu hỏi đầu tiên của bạn, trước tiên hãy để tôi cho bạn biết rằng câu hỏi của bạn có câu trả lời;). 'Chia sẻ' ... có đó là từ khóa :) Để có một cá thể trong bộ nhớ cache để người dùng kiểm soát trên tất cả các trang, hãy đặt Shared = 'true' trong chỉ thị @OutputCache. Điều này sẽ được đặt ở cấp độ kiểm soát của người dùng, ví dụ: trong trang ascx.
Để bộ nhớ cache điều khiển người dùng dựa trên thuộc tính kiểm soát người dùng, bạn nên chỉ định tên đầy đủ của thuộc tính trong phần varyByControls của PartialCachingAttribute. Nhiều thuộc tính nếu có nên được phân tách bằng dấu chấm phẩy.
<%@ 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" %>
hoặc bạn cũng có thể bao gồm các thuộc tính PartialCache cho người dùng điều khiển:
[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; }
}
HOẶC một cách khác để bộ nhớ cache kiểm soát trên sự kết hợp của cả hai giá trị sẽ là:
[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); }
}
}
Tham số cuối cùng (đúng) chỉ định chia sẻ. Thời gian được xác định bởi 60. Tham khảo các liên kết How to: Cache Multiple Versions of a User Control Based on Parameters
Để trả lời câu thứ hai Q của bạn, để làm trong suốt thời gian bộ nhớ cache cho biến điều khiển người dùng tại thời gian chạy, bạn có thể làm điều đó trong hai cách:
gán nó trong các mã điều khiển người dùng sau:
[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);
}
}
Bạn có thể gán nó trong mã phía sau của trang nơi điều khiển người dùng được tham chiếu bằng cách sử dụng ID của điều khiển người dùng.
ví dụ: Nếu điều khiển người dùng trên aspx là:
<mycontrols:control1 ID="ucControl1" runat="server" param1="15" param2="20" />
sau đó trong mã phía sau của aspx, bạn nên viết:
this.ucControl1.CachePolicy.Duration = new TimeSpan(0, 0, 60);
FYI, nếu cả hai người dùng điều khiển và trang được cache: Nếu trang thời lượng bộ nhớ cache đầu ra nhỏ hơn thời gian của điều khiển người dùng, điều khiển người dùng sẽ được lưu vào bộ nhớ cache cho đến khi hết hạn, ngay cả sau khi phần còn lại của trang được tạo lại cho yêu cầu. Ví dụ, nếu bộ đệm đầu ra của trang được đặt thành 50 giây và bộ nhớ đệm đầu ra của điều khiển người dùng được đặt thành 100 giây, điều khiển người dùng hết hạn một lần cho mỗi hai lần phần còn lại của trang hết hạn.
Response.Cache dành cho bộ đệm ẩn cấp trang. Tôi quan tâm đến bộ nhớ đệm mức điều khiển bằng cách sử dụng thuộc tính PartialCaching. – frankadelic
Có quan điểm của bạn ... Tôi đã chỉnh sửa phản hồi tương ứng :) –
Ngoài ra, ví dụ của bạn [PartialCaching (60, "param1", null, null, true)] ... điều này sẽ thay đổi dựa trên QueryString "param1" hoặc Tham số POST. Đó không phải là điều tôi muốn. "Tôi muốn các điều khiển được lưu trong bộ nhớ cache thay đổi dựa trên các thuộc tính được đặt trên cá thể điều khiển". – frankadelic