Wyświetlam tabelę na podstawie zapytania z aBaza danych. Żądanie ajax jest używane do pobierania danych z tabeli, serializowania do jsona i przy użyciu biblioteki JavaScript datatables na froncie, dane są aktualizowane.
Mam wymóg, aby móc następnie wysyłaćta tabela do Excela. To musi być w bardzo specyficznym formacie, dla którego napisałem klasę itp. W C #, która działa poprawnie. Mam także kontroler, który następnie przekaże strumień plików, aby użytkownik mógł pobrać plik.
Moje pytanie dotyczy buforowania danych zBaza danych. Nie chcę wracać do bazy danych i ponownie uruchamiać zapytania, aby następnie przekazać raport do mojego eksportera Excela, który powinien być przechowywany w jakiś sposób - najnowszy raport, który uruchomił użytkownik.
Są dwa sposoby, aby to zrobić:
1) buforowanie klienta - zapisz najnowszy raport uruchomiony przez użytkownika, a następnie wyeksportuj go do najnowszego raportu z pamięci podręcznej.
2) odesłać ostatnią odpowiedź json z wywołania Ajax i deserialise w kontrolerze z powrotem do obiektu raportu.
Numer jeden wydaje się najbardziej logiczny, ponieważ dwa wydają się bałaganiarskie i podatne na błędy. Chciałbym wiedzieć, czy jest to najlepsze rozwiązanie, a jeśli nie sugestia, jaka metoda byłaby najlepsza.
Odpowiedzi:
2 dla odpowiedzi № 1Myślę, że istnieje trzecia opcja. Mogę pomyśleć o 2 prostych metodach buforowania serwera, które mogą działać dla Ciebie.
- Buforowanie wyjściowe
- System.Runtime.Caching
Buforowanie danych wyjściowych jest bardzo przydatne i niezwykle łatwe, jeśli ustawisz je w akcji
W poniższym przykładzie akcja będzie buforowana dla 10 sekcji
public class HomeController : Controller
{
[OutputCache(Duration=10, VaryByParam="none")]
public ActionResult Index()
{
return View();
}
}
Możesz nawet mieć klucz buforujący oparty na parametrze
[OutputCache(Duration = int.MaxValue, VaryByParam = "id")]
public ActionResult Details(int id)
{
ViewData.Model = _dataContext.Movies.SingleOrDefault(m => m.Id == id);
return View();
}
Oto link do buforowania wyjścia
Jeśli jednak chcesz buforować po stronie serwera za pomocą System.Runtime.Caching, możesz znaleźć tutaj miły przykład http://deanhume.com/home/blogpost/object-caching----net-4/37