Как установить директиву выходного кэша для пользовательских элементов управления без кода впереди
-
09-06-2019 - |
Вопрос
Я написал элемент управления, который наследуется от System.Web.UI.WebControls.DropDownList
и поэтому у меня нет кода для этого элемента управления, но я все равно хочу установить директиву OutputCache.Есть ли способ установить это в коде С#, скажем, с помощью атрибута или чего-то в этом роде?
Я особенно надеюсь, что смогу повторить VaryByParam
свойство
Решение
Я понимаю, что это невероятно старый вопрос, но он все еще достоин ответа.
То, о чем вы говорите, — это не пользовательский элемент управления, а пользовательский элемент управления.То, что вы хотите сделать с OutputCache, можно сделать просто с помощью Context Cache.
В вашем коде, где вы получаете данные и привязываетесь к своему DropDownList, сделайте что-то вроде этого:
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();
Другие советы
Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));
Response.Cache.SetCacheability(HttpCacheability.Server);
Response.Cache.SetValidUntilExpires(true);