Кэширование фрагментов в ASP.NET с помощью Visual C# .NET
В этой статье описывается выполнение кэширования фрагментов в ASP.NET с помощью Visual C# .NET.
Исходная версия продукта: Microsoft ASP.NET
Исходный номер базы знаний: 308378
Сводка
В этой статье показано, как реализовать кэширование фрагментов в ASP.NET. Кэширование фрагментов фактически не кэширует фрагменты кода веб-формы напрямую; Кэширование фрагментов относится к кэшированию отдельных пользовательских элементов управления (ASCX) в веб-форме. Каждый пользовательский элемент управления может иметь независимые сроки кэширования и реализации способа применения кэширования. В примере кода в этой статье показано, как реализовать эту функцию.
Кэширование фрагментов полезно, если требуется кэшировать только подмножество страницы. Панели навигации, верхние и нижние колонтитулы являются хорошими кандидатами для кэширования фрагментов.
Требования
- Windows 2000
- Internet Information Server (IIS)
- .NET Framework
- ASP.NET
Создание веб-приложения ASP.NET с помощью C# .NET
Ниже показано, как создать веб-приложение ASP.NET с именем FragmentCache.
Открытие Visual Studio .NET
В меню Файл выберите пункт Создать и затем пункт Проект.
В диалоговом окне Новый проект щелкните Проекты Visual C# в разделе Типы проектов, а затем выберите ASP.NET веб-приложение в разделе Шаблоны.
В поле Имя введите FragmentCache. В поле Расположение выберите соответствующий сервер. Если вы используете локальный сервер, можно оставить имя сервера как
http://localhost
.
Создание пользовательских элементов управления
В этом разделе приведены примеры кода и объяснения каждого пользовательского элемента управления, который будет использоваться в этой статье. Вы можете скопировать и вставить пример кода в файл associated.ascx и страницу кода программной части, как описано.
Пользовательский элемент управления 1 (FragmentCtrl1.ascx)
Следующий пользовательский элемент управления FragmentCtrl1.ascx прост. FragmentCtrl1.ascx записывает время возникновения записи кэша для элемента. Как и для всех элементов управления, созданных для этой статьи, для элемента управления предоставляется базовое описание, которое упрощает распознавание параметров и связанных с ними действий во время выполнения в последующих разделах.
В Visual Studio .NET создайте пользовательский элемент управления следующим образом:
- В Обозреватель решений щелкните правой кнопкой мыши узел проекта, наведите указатель мыши на пункт Добавить и выберите команду Добавить пользовательский веб-элемент управления.
- Присвойте элементу управления имя FragmentCtrl1.ascx и нажмите кнопку Открыть.
Убедитесь, что выбрана вкладка Конструктор . Щелкните и перетащите элемент управления Метка веб-формы из раздела веб-формы панели элементов, а затем перетащите элемент управления Метка на страницу.
Щелкните элемент управления Метка. В области Свойства интегрированной среды разработки (IDE) Visual Studio .NET введите CacheEntryTime в свойстве ID и оставьте свойство Text пустым.
Переключитесь в представление HTML и добавьте следующую
@ OutputCache
директиву в начало страницы:<%@ OutputCache Duration="40" VaryByParam="none"%>
Щелкните правой кнопкой мыши ASCX-файл и выберите команду Просмотреть код , чтобы отобразить источник страницы программной части.
Добавьте следующий код в
Page_Load
событие, которое задаетCacheEntryTime
свойство меткиText
:private void Page_Load(object sender, System.EventArgs e) { CacheEntryTime.Text ="FragmentCtrl1: " + DateTime.Now.TimeOfDay.ToString(); }
Пользовательский элемент управления 2 (FragmentCtrl2.ascx)
Хотя вы можете просто создать другую версию первого элемента управления с другой длительностью кэша, чтобы показать, как несколько пользовательских элементов управления могут иметь независимое поведение на одной странице, этот раздел делает второй элемент управления , FragmentCtrl2.ascx, более интересным. FragmentCtrl2.ascx используется для введения атрибута VaryByControl . VaryByControl позволяет создавать различные записи кэша на основе значений для указанного элемента управления. Эта функция гораздо понятнее во время выполнения в следующем разделе.
В Visual Studio .NET создайте пользовательский элемент управления следующим образом:
- В Обозреватель решений щелкните правой кнопкой мыши узел проекта, наведите указатель мыши на пункт Добавить и выберите команду Добавить пользовательский веб-элемент управления.
- Присвойте элементу управления имя FragmentCtrl2.ascx и нажмите кнопку Открыть.
Убедитесь, что выбрана вкладка Конструктор . Щелкните и перетащите элемент управления Метка веб-формы из раздела веб-формы панели элементов, а затем перетащите элемент управления Метка на страницу.
Щелкните элемент управления Метка. В области Свойства введите CacheEntryTime в свойстве ID и оставьте свойство Text пустым.
Поместите курсор непосредственно после элемента управления Метка, а затем нажмите клавишу ВВОД , чтобы перейти к следующей строке страницы.
Щелкните и перетащите элемент управления RadioButtonList веб-формы из раздела веб-формы панели элементов и перетащите его на страницу. Элемент управления RadioButtonList должен отображаться сам по себе в строке после элемента управления Label.
Щелкните элемент управления RadioButtonList. В области Свойства введите MyRadioButtonList в свойстве ID .
В области Свойства найдите свойство Items для элемента управления MyRadioButtonList , щелкните Коллекция, а затем нажмите кнопку с многоточием (...), которая появится рядом с элементом Коллекция.
В окне Редактор коллекции ListItem добавьте элементы ListItem следующим образом:
- В области Участники нажмите кнопку Добавить.
- В разделе Свойства ListItem задайте для параметра Текст и Значениезначение Да, а для параметра Выбрано значение True.
- В разделе Участники нажмите кнопку Добавить еще раз.
- В разделе Свойства ListItem задайте для параметра Текст и Значениезначение Нет, а для параметра Выбрано значение False.
- В разделе Участники щелкните Добавить в последний раз.
- В разделе Свойства ListItem задайте для параметра Текст и Значение значения значение Возможно, а для параметра Выбрано значение False.
- Нажмите кнопку ОК , чтобы вернуться к ASCX-файлу в режиме конструктора . Обратите внимание, что в элементе управления RadioButtonList отображаются три переключателя: "Да", "Нет" и "Возможно".
Поместите курсор непосредственно после элемента управления RadioButtonList и нажмите клавишу ВВОД , чтобы перейти к следующей строке страницы.
Щелкните и перетащите элемент управления Кнопка веб-формы из раздела веб-формы панели элементов и перетащите его на страницу. Элемент управления Button должен отображаться сам по себе в строке после элемента управления RadioButtonList.
Щелкните элемент управления Кнопка. В области Свойства введите Отправить в свойстве Текст .
Переключитесь в представление HTML и добавьте следующую
@OutputCache
директиву в начало страницы:<%@ OutputCache Duration="60" VaryByParam="none" VaryByControl="MyRadioButtonList"%>
Щелкните правой кнопкой мыши ASCX-файл и выберите команду Просмотреть код , чтобы отобразить источник страницы программной части.
Добавьте следующий код в
Page_Load
событие, которое задаетCacheEntryTime
свойство меткиText
:private void Page_Load(object sender, System.EventArgs e) { CacheEntryTime.Text = "FragmentCtrl2: " + DateTime.Now.TimeOfDay.ToString(); }
Создание веб-формы для размещения пользовательских элементов управления
Теперь вы можете создать веб-форму (.aspx), содержащую только что разработанный пользовательский элемент управления. Чтобы создать веб-форму, выполните следующие действия.
Добавьте новую веб-форму с именем FragmentCaching.aspx в проект в Visual Studio .NET следующим образом:
- В Обозреватель решений щелкните правой кнопкой мыши узел проекта, наведите указатель мыши на пункт Добавить и выберите команду Добавить веб-форму.
- Присвойте FragmentCaching.aspx веб-формы имя и нажмите кнопку Открыть.
Убедитесь, что выбрана вкладка Конструктор . Щелкните и перетащите элемент управления Метка веб-формы из раздела веб-формы панели элементов и перетащите его на страницу.
Щелкните элемент управления Метка. В области Свойства введите Время в свойстве ID и оставьте свойство Текст пустым.
Поместите курсор непосредственно после элемента управления Метка и нажмите клавишу ВВОД , чтобы перейти к следующей строке страницы.
Перетащите FragmentCtrl1.ascx на веб-форму, чтобы он располагался после элемента управления Label в строке. Поместите курсор непосредственно после элемента управления и нажмите клавишу ВВОД , чтобы перейти к следующей строке страницы.
Перетащите FragmentCtrl2.ascx на веб-форму, чтобы он располагался после FragmentCtrl1.ascx на строке.
В представлении HTML веб-форма должна выглядеть примерно так:
<%@ Page language ="c#" Codebehind="FragmentCaching.aspx.cs" AutoEventWireup="false" Inherits="FragmentCache.FragmentCaching" %> <%@ Register TagPrefix="uc1" TagName="FragmentCtrl1" Src="FragmentCtrl1.ascx" %> <%@ Register TagPrefix="uc1" TagName="FragmentCtrl2" Src="FragmentCtrl2.ascx" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <HTML> <HEAD> <meta name="GENERATOR" Content="Microsoft Visual Studio 7.0"> <meta name="CODE_LANGUAGE" Content="C#"> <meta name="vs_defaultClientScript" content="JavaScript (ECMAScript)"> <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> </HEAD> <body> <form id="FragmentCaching" method="post" runat="server"> <P> WebForm Time: <asp:Label id="Time" runat="server" ForeColor="Blue"></asp:Label> </P> <P> <uc1:FragmentCtrl1 id="FragmentCtrl11" runat="server"> </uc1:FragmentCtrl1> </P> <P> <uc1:FragmentCtrl2 id="FragmentCtrl21" runat="server"> </uc1:FragmentCtrl2> </P> </form> </body> </HTML>
Примечание.
Убедитесь, что элементы управления размещены внутри
Щелкните правой кнопкой мыши файл .aspx и выберите пункт Просмотреть код , чтобы отобразить источник страницы программной части.
Добавьте следующий код в
Page_Load
событие, которое задаетTime
свойство меткиText
:private void Page_Load(object sender, System.EventArgs e) { Time.Text = "WebFormTime: " + DateTime.Now.TimeOfDay.ToString(); }
В меню Файл щелкните Сохранить все , чтобы сохранить пользовательские элементы управления, веб-форму и другие связанные файлы проекта.
В меню Сборка в интегрированной среде разработки (IDE) Visual Studio .NET щелкните Сборка , чтобы выполнить сборку проекта.
Запуск приложения
В этом разделе показано, как просмотреть код во время выполнения, чтобы увидеть поведение кэширования, а затем кратко описывается, почему код работает так, как он делает.
В интегрированной среде разработки Visual Studio .NET Обозреватель решений щелкните правой кнопкой мыши веб-форму FragmentCaching.aspx и выберите команду Просмотреть в браузере, чтобы запустить код.
Когда страница появится в браузере, щелкните ее правой кнопкой мыши и выберите команду Обновить , чтобы обновить страницу. Вы также можете нажать клавишу F5 , чтобы обновить страницу, если вы просматриваете страницу в браузере, который является внешним для интегрированной среды разработки Visual Studio .NET.
Примечание.
Время в веб-форме обновлено, но пользовательские элементы управления по-прежнему отображают время, когда была сделана соответствующая запись кэша.
Во втором элементе управления нажмите кнопку Отправить. Обратите внимание, что элемент управления отображает время обновления. Это происходит в ответ на параметр атрибута VaryByControl для пользовательского элемента управления, который ссылается на элемент управления RadioButtonList.
Нажмите кнопку Нет, а затем еще раз нажмите кнопку Отправить .
Примечание.
Время снова обновляется на экране пользовательского элемента управления. Это связано с тем, что для элемента управления создается новая запись кэша на основе этого параметра No value. Повторите этот шаг, за исключением параметра Возможно . Вы видите то же самое поведение.
Нажмите кнопку Да, а затем еще раз нажмите кнопку Отправить . Повторите эту операцию с параметрами Нет и Может быть .
Эти выборы для элемента управления кэшируются и отображают предыдущее время входа в кэш. Если нажать кнопку Отправить после параметра длительности директивы @ OutputCache , время пользовательского элемента управления обновляется для каждого конкретного значения, выбранного для элемента управления RadioButtonList.
Примечание.
Цель этой статьи не заключается в том, чтобы охватить все возможные параметры и сценарии кэширования фрагментов.
Устранение неполадок
Не пытайтесь программно управлять пользовательским элементом управления, кэшируемым в выходных данных. Это связано с тем, что элемент управления динамически создается только при первом запуске перед записью кэша. Кэш вывода удовлетворяет всем остальным запросам до истечения срока действия элемента управления.
Если веб-форма, в которой размещаются пользовательские элементы управления, имеет длительность кэша вывода, которая больше, чем длительность пользовательских элементов управления, параметр веб-формы определяет поведение кэширования элементов управления.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по