2009-09-23 11 views
0

Мы работаем над приложением ASP.NET. Он имеет 3-4 формы, отображающих раскрывающийся список стран. Здесь мы хотели бы избежать связывания этих выпадающих списков каждый раз, получая данные из базы данных. Вместо этого вы ищете лучшую практику связывания ее один раз, скажем, при загрузке приложения/некоторых других.ASP.NET - Загрузка элементов управления за один раз (при загрузке приложения)

Не могли бы вы дать мне знать, как мы могли бы пойти на это? Любая ссылка или документ будет отличной.

Большое спасибо, С уважением, Нани

+0

Просто чтобы быть ясным: вы хотите привязать выпадающие списки, но не к базе данных? Если да, рассмотрели ли вы объект ObjectBindingSource? –

+0

звучит скорее как он не хочет ударять БД при любой обратной передаче. С ObjectBindingSource это все равно произойдет. Это просто еще один способ привязки к пользовательскому интерфейсу. – Juri

ответ

0

Место выпадающий в пользовательский элемент управления и позволяют output caching на пользовательский элемент управления.

Это решение заставляет отображаемый HTML-код кэшироваться, поэтому привязка данных не требуется вызывать при каждом запросе страницы.

+0

Если вы используете объект ObjectDataSource или SqlDataSource для привязки выпадающего элемента управления, вы также можете включить кеширование в элементе управления источником данных. –

0

Другой возможностью было бы использование некоторого механизма кэширования для вашей логики BL. Например, в вашей странице/UserControl вы могли бы (не принимать мой синтаксис слишком строги))

общественный частичный класс MyPaged: Страница {

общественной недействительным Pageload (..) {

if(!IsPostBack) 
    { 
    dropDownCountries.DataSource = CountryBL.GetCountries(); 
    dropDownCountries.DataBind(); 
    } 
    ... 

}

}

и в вашей бизнес-логики класса вы делаете какой-то кэширования, где вы может иметь одноэлементный класс, который держит страны и функционирует как ваш кеш. Способ псевдокод может быть

public IList<Country> GetCountries 
{ 
    //if the cache is empty or it should be refreshed, fills the local 
    //list of countries, i.e. the cache, with fresh entries from the DB 
    //there could be some time condition, i.e. refresh every day or so 
    EnsureCacheValid(); 

    return CachedCountries; //the cache of countries 
} 

Это может быть еще один вариант с тем преимуществом, что ваша логика представления даже не знает о кэшировании, и если бы вы добавить доступ WebService или около того, вы также извлечь выгоду из кэширования , Единственное, на что вы должны обратить внимание, - это возможность того, что пользователь может изменить страны (что в вашем примере я не предполагаю).

Смежные вопросы