Кэширование фрагментов в 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.

  1. Открытие Visual Studio .NET

  2. В меню Файл выберите пункт Создать и затем пункт Проект.

  3. В диалоговом окне Новый проект щелкните Проекты Visual C# в разделе Типы проектов, а затем выберите ASP.NET веб-приложение в разделе Шаблоны.

  4. В поле Имя введите FragmentCache. В поле Расположение выберите соответствующий сервер. Если вы используете локальный сервер, можно оставить имя сервера как http://localhost.

Создание пользовательских элементов управления

В этом разделе приведены примеры кода и объяснения каждого пользовательского элемента управления, который будет использоваться в этой статье. Вы можете скопировать и вставить пример кода в файл associated.ascx и страницу кода программной части, как описано.

Пользовательский элемент управления 1 (FragmentCtrl1.ascx)

Следующий пользовательский элемент управления FragmentCtrl1.ascx прост. FragmentCtrl1.ascx записывает время возникновения записи кэша для элемента. Как и для всех элементов управления, созданных для этой статьи, для элемента управления предоставляется базовое описание, которое упрощает распознавание параметров и связанных с ними действий во время выполнения в последующих разделах.

  1. В Visual Studio .NET создайте пользовательский элемент управления следующим образом:

    1. В Обозреватель решений щелкните правой кнопкой мыши узел проекта, наведите указатель мыши на пункт Добавить и выберите команду Добавить пользовательский веб-элемент управления.
    2. Присвойте элементу управления имя FragmentCtrl1.ascx и нажмите кнопку Открыть.
  2. Убедитесь, что выбрана вкладка Конструктор . Щелкните и перетащите элемент управления Метка веб-формы из раздела веб-формы панели элементов, а затем перетащите элемент управления Метка на страницу.

  3. Щелкните элемент управления Метка. В области Свойства интегрированной среды разработки (IDE) Visual Studio .NET введите CacheEntryTime в свойстве ID и оставьте свойство Text пустым.

  4. Переключитесь в представление HTML и добавьте следующую @ OutputCache директиву в начало страницы:

    <%@ OutputCache Duration="40" VaryByParam="none"%>
    
  5. Щелкните правой кнопкой мыши ASCX-файл и выберите команду Просмотреть код , чтобы отобразить источник страницы программной части.

  6. Добавьте следующий код в 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 позволяет создавать различные записи кэша на основе значений для указанного элемента управления. Эта функция гораздо понятнее во время выполнения в следующем разделе.

  1. В Visual Studio .NET создайте пользовательский элемент управления следующим образом:

    1. В Обозреватель решений щелкните правой кнопкой мыши узел проекта, наведите указатель мыши на пункт Добавить и выберите команду Добавить пользовательский веб-элемент управления.
    2. Присвойте элементу управления имя FragmentCtrl2.ascx и нажмите кнопку Открыть.
  2. Убедитесь, что выбрана вкладка Конструктор . Щелкните и перетащите элемент управления Метка веб-формы из раздела веб-формы панели элементов, а затем перетащите элемент управления Метка на страницу.

  3. Щелкните элемент управления Метка. В области Свойства введите CacheEntryTime в свойстве ID и оставьте свойство Text пустым.

  4. Поместите курсор непосредственно после элемента управления Метка, а затем нажмите клавишу ВВОД , чтобы перейти к следующей строке страницы.

  5. Щелкните и перетащите элемент управления RadioButtonList веб-формы из раздела веб-формы панели элементов и перетащите его на страницу. Элемент управления RadioButtonList должен отображаться сам по себе в строке после элемента управления Label.

  6. Щелкните элемент управления RadioButtonList. В области Свойства введите MyRadioButtonList в свойстве ID .

  7. В области Свойства найдите свойство Items для элемента управления MyRadioButtonList , щелкните Коллекция, а затем нажмите кнопку с многоточием (...), которая появится рядом с элементом Коллекция.

  8. В окне Редактор коллекции ListItem добавьте элементы ListItem следующим образом:

    1. В области Участники нажмите кнопку Добавить.
    2. В разделе Свойства ListItem задайте для параметра Текст и Значениезначение Да, а для параметра Выбрано значение True.
    3. В разделе Участники нажмите кнопку Добавить еще раз.
    4. В разделе Свойства ListItem задайте для параметра Текст и Значениезначение Нет, а для параметра Выбрано значение False.
    5. В разделе Участники щелкните Добавить в последний раз.
    6. В разделе Свойства ListItem задайте для параметра Текст и Значение значения значение Возможно, а для параметра Выбрано значение False.
    7. Нажмите кнопку ОК , чтобы вернуться к ASCX-файлу в режиме конструктора . Обратите внимание, что в элементе управления RadioButtonList отображаются три переключателя: "Да", "Нет" и "Возможно".
  9. Поместите курсор непосредственно после элемента управления RadioButtonList и нажмите клавишу ВВОД , чтобы перейти к следующей строке страницы.

  10. Щелкните и перетащите элемент управления Кнопка веб-формы из раздела веб-формы панели элементов и перетащите его на страницу. Элемент управления Button должен отображаться сам по себе в строке после элемента управления RadioButtonList.

  11. Щелкните элемент управления Кнопка. В области Свойства введите Отправить в свойстве Текст .

  12. Переключитесь в представление HTML и добавьте следующую @OutputCache директиву в начало страницы:

    <%@ OutputCache Duration="60" VaryByParam="none" VaryByControl="MyRadioButtonList"%>
    
  13. Щелкните правой кнопкой мыши ASCX-файл и выберите команду Просмотреть код , чтобы отобразить источник страницы программной части.

  14. Добавьте следующий код в Page_Load событие, которое задает CacheEntryTime свойство метки Text :

    private void Page_Load(object sender, System.EventArgs e)
    {
        CacheEntryTime.Text = "FragmentCtrl2: " + DateTime.Now.TimeOfDay.ToString();
    }
    

Создание веб-формы для размещения пользовательских элементов управления

Теперь вы можете создать веб-форму (.aspx), содержащую только что разработанный пользовательский элемент управления. Чтобы создать веб-форму, выполните следующие действия.

  1. Добавьте новую веб-форму с именем FragmentCaching.aspx в проект в Visual Studio .NET следующим образом:

    1. В Обозреватель решений щелкните правой кнопкой мыши узел проекта, наведите указатель мыши на пункт Добавить и выберите команду Добавить веб-форму.
    2. Присвойте FragmentCaching.aspx веб-формы имя и нажмите кнопку Открыть.
  2. Убедитесь, что выбрана вкладка Конструктор . Щелкните и перетащите элемент управления Метка веб-формы из раздела веб-формы панели элементов и перетащите его на страницу.

  3. Щелкните элемент управления Метка. В области Свойства введите Время в свойстве ID и оставьте свойство Текст пустым.

  4. Поместите курсор непосредственно после элемента управления Метка и нажмите клавишу ВВОД , чтобы перейти к следующей строке страницы.

  5. Перетащите FragmentCtrl1.ascx на веб-форму, чтобы он располагался после элемента управления Label в строке. Поместите курсор непосредственно после элемента управления и нажмите клавишу ВВОД , чтобы перейти к следующей строке страницы.

  6. Перетащите FragmentCtrl2.ascx на веб-форму, чтобы он располагался после FragmentCtrl1.ascx на строке.

  7. В представлении 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>
    

    Примечание.

    Убедитесь, что элементы управления размещены внутри

  8. Щелкните правой кнопкой мыши файл .aspx и выберите пункт Просмотреть код , чтобы отобразить источник страницы программной части.

  9. Добавьте следующий код в Page_Load событие, которое задает Time свойство метки Text :

    private void Page_Load(object sender, System.EventArgs e)
    {
        Time.Text = "WebFormTime: " + DateTime.Now.TimeOfDay.ToString();
    }
    
  10. В меню Файл щелкните Сохранить все , чтобы сохранить пользовательские элементы управления, веб-форму и другие связанные файлы проекта.

  11. В меню Сборка в интегрированной среде разработки (IDE) Visual Studio .NET щелкните Сборка , чтобы выполнить сборку проекта.

Запуск приложения

В этом разделе показано, как просмотреть код во время выполнения, чтобы увидеть поведение кэширования, а затем кратко описывается, почему код работает так, как он делает.

  1. В интегрированной среде разработки Visual Studio .NET Обозреватель решений щелкните правой кнопкой мыши веб-форму FragmentCaching.aspx и выберите команду Просмотреть в браузере, чтобы запустить код.

  2. Когда страница появится в браузере, щелкните ее правой кнопкой мыши и выберите команду Обновить , чтобы обновить страницу. Вы также можете нажать клавишу F5 , чтобы обновить страницу, если вы просматриваете страницу в браузере, который является внешним для интегрированной среды разработки Visual Studio .NET.

    Примечание.

    Время в веб-форме обновлено, но пользовательские элементы управления по-прежнему отображают время, когда была сделана соответствующая запись кэша.

  3. Во втором элементе управления нажмите кнопку Отправить. Обратите внимание, что элемент управления отображает время обновления. Это происходит в ответ на параметр атрибута VaryByControl для пользовательского элемента управления, который ссылается на элемент управления RadioButtonList.

  4. Нажмите кнопку Нет, а затем еще раз нажмите кнопку Отправить .

    Примечание.

    Время снова обновляется на экране пользовательского элемента управления. Это связано с тем, что для элемента управления создается новая запись кэша на основе этого параметра No value. Повторите этот шаг, за исключением параметра Возможно . Вы видите то же самое поведение.

  5. Нажмите кнопку Да, а затем еще раз нажмите кнопку Отправить . Повторите эту операцию с параметрами Нет и Может быть .

    Эти выборы для элемента управления кэшируются и отображают предыдущее время входа в кэш. Если нажать кнопку Отправить после параметра длительности директивы @ OutputCache , время пользовательского элемента управления обновляется для каждого конкретного значения, выбранного для элемента управления RadioButtonList.

Примечание.

Цель этой статьи не заключается в том, чтобы охватить все возможные параметры и сценарии кэширования фрагментов.

Устранение неполадок

  • Не пытайтесь программно управлять пользовательским элементом управления, кэшируемым в выходных данных. Это связано с тем, что элемент управления динамически создается только при первом запуске перед записью кэша. Кэш вывода удовлетворяет всем остальным запросам до истечения срока действия элемента управления.

  • Если веб-форма, в которой размещаются пользовательские элементы управления, имеет длительность кэша вывода, которая больше, чем длительность пользовательских элементов управления, параметр веб-формы определяет поведение кэширования элементов управления.