2013-03-05 8 views
5

Tworzę witrynę internetową z MVC 4. Dla wymagań projektu obrazy są przechowywane w bazie danych. Mam widok, który wiążę się model, w którym mam id obrazu towarzyszącej historię, a następnie pojawia się obraz:MVC buforuje obrazy bazy danych

Widok:

<img src='<%= Url.Action("ShowImagen", "Home", new {id = item.IdImagen}) %>' style="width: 300px; 
         height: 200px;" /> 

Kontroler:

public FileResult ShowImagen(int id) 
    { 
     if (id > 0) 
     { 
      var imageData = new NoticiaRepository().GetImagen(id); 
      return File(imageData, "image/jpg"); 
     } 
     else 
     { 
      return null; 
     }   
    } 

Mając to na uwadze i sprawdzając w Chrome, zauważyłem, że po ponownym wczytaniu strony, nie ładuje ona obrazów z pamięci podręcznej, tak jak inne pliki, jak .css lub inne obrazy załadowane z systemu plików.

Czy istnieje sposób na zrobienie tych obrazów w pamięci podręcznej? Powitanie i dzięki.

Odpowiedz

11

Można ozdobić swoje działania ShowImagen kontrolera z atrybutem [OutputCache]:

[OutputCache(Duration = 3600, Location = OutputCacheLocation.Client, VaryByParam = "id")] 
public ActionResult ShowImagen(int id) 
{ 
    ... 
} 
+0

Dziękuję, spróbowałem z OutputCache, ale nie z parametrem Location. – Dani

+0

Dzięki, działa idealnie! – WhatsInAName

+0

@ darin-dimitrov A jak możesz unieważnić pamięć podręczną w pewnym momencie? (jeśli zawartość jednego obrazu zmienia się) – RazvanR

0

Czy próbowałeś dekoracji metody działania z atrybutem OutputCache?

+0

Niż Daniel, kluczem jest OutputCache z parametrem Location. – Dani