Używam aplikacji Asp.Net MVC.
Jak w poniższym kodzie mogę uniknąć dwóch wywołań bazy danych w celu wypełnienia listy rozwijanej?
[HttpGet]
public ActionList Upload(){
// do something
//For populating drop downlist take data from db
Return View("Upload");
}
[HttpPost]
public ActionList Upload(){
//do something
//again take data from db for populating dropdown
Return View("Upload");
}
Jakiś inny sposób niż metoda ajax jQuery? Dziękuję
2 odpowiedzi
Zależy to od rozmiaru danych i tego, jak często mogą się one zmieniać, ale typowym rozwiązaniem jest użycie właściwości Cache HttpContext.
public List<items> GetDropdownlistItems()
{
string cacheKey = "dropdownlistItems";
if (HttpContext.Current.Cache[cacheKey] != null)
{
return (List<items>)HttpContext.Current.Cache[cacheKey];
}
var items = GetItemsFromDatabase();
HttpContext.Current.Cache.Insert(cacheKey, items, null, DateTime.Now.AddHours(1), System.Web.Caching.Cache.NoSlidingExpiration);
return items;
}
Mam tendencję do buforowania danych, które rzadko są zmieniane, takie jak ta.
Sprawdź Bloki aplikacji buforujących EntLibs.
Możesz załadować wszystkie dane do pamięci podręcznej przy pierwszym użyciu i ustawić czas wygaśnięcia w zależności od tego, jak szybko chcesz, aby zmiany w bazie danych zaczęły obowiązywać.
Zasadniczo dodaj warstwę między kontrolerem a bazą danych, która uruchamia kod podobny do tego:
MyData myData = null;
myData = (MyData )cacheManager.GetData("myData");
if (myData == null)
{
myData = dataProvider.GetData();
cacheManager.Add("myData", myData, CacheItemPriority.Normal, null, timeToExpire);
}
return myData;
Gdzie myData to dane potrzebne do listy rozwijanej.
Podobne pytania
Nowe pytania
c#
C # (wymawiane „patrz ostro”) jest językiem programowania wysokiego poziomu, statycznie typowanym, wieloparadygmatowym opracowanym przez firmę Microsoft. Kod C # zwykle jest przeznaczony dla rodziny narzędzi Microsoft .NET i czasów wykonywania, do których należą między innymi .NET Framework, .NET Core i Xamarin. Użyj tego tagu w przypadku pytań dotyczących kodu napisanego w C # lub C # formalnej specyfikacji.