Варьируйтесь использованием свойств элементов управления PartialCaching в ASP.NET

Правильный (например, ленивый) способ сделать это - использовать lodash, потому что код, который вы не пишете - это код, который вам не нужно поддерживать: катиться самостоятельно, что-то вроде этого должно сработать:

function filter_obj(obj = {}, keys = [] ) {
    if ( !keys || !keys.length ) return obj;

    const desired = new Set(keys);
    const filtered = {};
    for ( [ key, value ] of Object.entries(obj) ) {
        if ( !desired.has(key) ) continue;
        filtered[key] = value;
    }
    return filtered;
}
12
задан frankadelic 19 May 2009 в 04:10
поделиться

2 ответа

Чтобы ответить на ваш первый вопрос, позвольте мне сначала сказать вам, что у вашего вопроса есть ответ;). 'Shared' ... да, это ключевое слово :) Чтобы иметь единственный экземпляр в кеше для пользовательского элемента управления на всех страницах, установите Shared = 'true' в директиве @OutputCache. Это должно быть установлено на уровне пользовательского элемента управления, т. Е. На странице ascx.

Чтобы кэшировать пользовательский элемент управления на основе свойств пользовательского элемента управления, вы должны указать полное имя свойств в разделеariByControls атрибута PartialCachingAttribute. Несколько свойств, если таковые имеются, должны быть разделены точкой с запятой.

<%@ 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, значение null, «UC_WebUserControl.BothParams», значение null, true)]
общедоступный частичный класс WebUserControl1: System.Web.UI.UserControl
{
 ...
 protected void Page_Load (отправитель объекта, EventArgs e)
 {
 this.CachePolicy.Duration = новый интервал времени (0, 0, 60);
 } 
} 
  • Вы можете назначить его в коде позади страницы, на которой имеется ссылка на пользовательский элемент управления, используя идентификатор пользовательского элемента управления.

  • например, если пользовательский элемент управления в aspx равен:

    <mycontrols:control1 ID="ucControl1" runat="server" param1="15" param2="20" />
    

    , то в коде позади aspx, вы должны написать:

    this.ucControl1.CachePolicy.Duration = new TimeSpan(0, 0, 60);
    

    FYI, если и пользовательский элемент управления, и страница кэшируются: если длительность кэша вывода страницы меньше, чем у пользовательского элемента управления, пользовательский элемент управления будет кэшироваться до истечения срока его действия, даже после остальная часть страницы создается повторно по запросу. Например, если кэширование вывода страницы установлено на 50 секунд, а кэширование вывода пользовательского элемента управления установлено на 100 секунд, срок действия пользовательского элемента управления истекает один раз для каждых двух раз, когда истекает срок остальной части страницы.

    22
    ответ дан 2 December 2019 в 06:27
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: