Como definir a diretiva de cache de saída em controles personalizados sem código na frente

StackOverflow https://stackoverflow.com/questions/78974

Pergunta

Eu escrevi um controle que herda do System.Web.UI.WebControls.DropDownList e portanto não tenho nenhum código na frente para esse controle, mas ainda quero definir a diretiva OutputCache.Existe alguma maneira de definir isso no código C#, digamos, com um atributo ou algo parecido?

Espero particularmente poder replicar o VaryByParam propriedade

Foi útil?

Solução

Sei que esta é uma pergunta incrivelmente antiga, mas ainda merece uma resposta.

O que você está falando não é um controle de usuário, é um controle personalizado.O que você deseja fazer com o OutputCache pode ser feito simplesmente com o Context Cache.

No seu código onde você está obtendo os dados e vinculando ao seu DropDownList faça algo assim:

        List<Object> listOfObjects = null;
//assuming a List of Objects... it doesn't matter whatever type of data you use
        if (Context.Cache["MyDataCacheKey"] == null)
        {
            // data not cached, load it from database
            listOfObjects = GetDataFromDB();
//add your data to the context cache with a sliding expiration of 10 minutes.
            Context.Cache.Add("MyDataCacheKey", listOfObjects, null,
                System.Web.Caching.Cache.NoAbsoluteExpiration,
                TimeSpan.FromMinutes(10.0),
                System.Web.Caching.CacheItemPriority.Normal, null);
        }
        else
            listOfObjects = (List<Object>)Context.Cache["MyDataCacheKey"];

        DropDownList1.DataSource = listOfObjects;
        DropDownList1.DataBind();

Outras dicas

Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));
Response.Cache.SetCacheability(HttpCacheability.Server);
Response.Cache.SetValidUntilExpires(true);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top