Как установить директиву кэша вывода для пользовательских элементов управления без кода перед - PullRequest
0 голосов
/ 17 сентября 2008

Я написал элемент управления, который наследуется от System.Web.UI.WebControls.DropDownList, поэтому у меня нет кода для этого элемента, но я все еще хочу установить директиву OutputCache. Есть ли способ установить это в коде C #, скажем, с атрибутом или что-то подобное?

Я особенно надеюсь, что смогу повторить свойство VaryByParam

Ответы [ 2 ]

2 голосов
/ 15 июля 2010

Я понимаю, что это невероятно старый вопрос, но он все еще заслуживает ответа.

То, о чем вы говорите, это не пользовательский элемент управления, это пользовательский элемент управления. То, что вы хотите сделать с 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();
1 голос
/ 17 сентября 2008
Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));
Response.Cache.SetCacheability(HttpCacheability.Server);
Response.Cache.SetValidUntilExpires(true);
...