Comment définir la directive de cache de sortie sur des contrôles personnalisés sans code devant

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

Question

J'ai écrit un contrôle qui hérite du System.Web.UI.WebControls.DropDownList et je n'ai donc aucun code devant lui pour ce contrôle, mais je souhaite tout de même définir la directive OutputCache. Y at-il un moyen de définir cela dans le code C #, disons avec un attribut ou quelque chose comme ça?

J'espère particulièrement pouvoir répliquer la propriété VaryByParam

Était-ce utile?

La solution

Je réalise que c’est une question incroyablement ancienne, mais elle mérite quand même une réponse.

Ce dont vous parlez n’est pas un contrôle utilisateur, c’est un contrôle personnalisé. Ce que vous voulez faire avec OutputCache peut être fait simplement avec le cache de contexte.

Dans votre code où vous obtenez les données et la liaison à votre DropDownList, procédez comme suit:

        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();

Autres conseils

Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));
Response.Cache.SetCacheability(HttpCacheability.Server);
Response.Cache.SetValidUntilExpires(true);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top