Comment définir la directive de cache de sortie sur des contrôles personnalisés sans code devant
-
09-06-2019 - |
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
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);