У меня есть пользовательский элемент управления, который должен использовать кэширование, с VaryByControl
.Файл .ascx
выглядит следующим образом:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="TestControl.ascx.cs" Inherits="mynamespace.TestControl" %>
<%@ OutputCache Duration="10" Shared="true" VaryByControl="Test" %>
<p id="SomeText" runat="server">Nothing</p>
Класс TestControl
в файле code-behind имеет свойство int Test {...}
и обработчик события Page_Load()
, который заполняет абзац SomeText
:
SomeText.InnerText = string.Format(@"Test={0} at {1}", Test, DateTime.Now)
У меня есть файл .aspx
, который выглядит следующим образом:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TestPage.aspx.cs" Inherits="mynamespace.TestPage" %>
<%@ Register TagPrefix="xxx" TagName="TestControl" Src="Controls\TestControl.ascx" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<xxx:TestControl Test="6" runat="server" />
<xxx:TestControl Test="7" runat="server" />
<hr />
<asp:PlaceHolder ID="Suport" runat="server" />
</body>
</html>
Два тега <xxx:TestControl>
правильно загружают экземпляры TestControl
с Test
установив ожидаемое значение, я могу несколько раз обновить браузер и увидеть, как кеш правильно выполняет свою работу.
Теперь я хотел бы заполнить <asp:PlaceHolder ID="Suport" />
некоторыми экземплярами TestControl
,используя переменные Test
значения, которые должны выиграть от правильного кэширования.Я пытаюсь использовать метод LoadControl
, но не могу найти способ указать значение для свойства Test
.Я ожидаю, что такой метод существует, после того, как все asp.net
код, загружающий страницу .aspx
, удастся найти правильный кешированный элемент управления.Все, что я получаю, это экземпляр PartialCachingControl
без инициализации CachedControl
, и во время выполнения отрисованный TestControl
показывает Test
имеет значение по умолчанию 0
.
Вот как мой .aspx
*Обработчик событий 1037 * выглядит следующим образом:
protected void Page_Load(object sender, EventArgs e)
{
PartialCachingControl tc = (PartialCachingControl) LoadControl(@"Controls\TestControl.ascx");
if (tc.CachedControl != null)
((TestControl)tc.CachedControl).Test = 67;
Suport.Controls.Add(tc);
}
Редактировать
Я мог бы обойти проблему, кэшировав всю страницу, но мне кажется странным, что я не могу найти способ сделать этоэто таким образом .Тем более, что вызов элемента управления через файл ASPX работает должным образом (доказывая, что есть выход).
Редактировать 2
Хмм, пока нет ответов.Я запустил награду, надеюсь, она получит немного больше внимания.