2013-02-20 6 views
7

Używam programu ASP.NET MVC Wrapper w aplikacji MVC4.Jak wyłączyć pamięć podręczną żądania "Read" w Kendo UI Źródło danych

Wszystko działa dobrze oprócz jednego konkretnego problemu: Zdefiniowałem źródło danych dla siatki Kendo UI, a po załadowaniu widoku akcja odczytu jest wywoływana zgodnie z oczekiwaniami.

Jednak po ponownym załadowaniu strony, żądanie "odczyt" otrzymuje odpowiedź z wynikiem 304.

Jak wyłączyć pamięć podręczną przez konfigurację źródła danych?

Odpowiedz

0

Nie można kontrolować poprzez konfigurację Datasource. Będziesz musiał zastosować atrybut do metody Read na kontrolerze, aby zapobiec buforowaniu.

Alternatywnym rozwiązaniem byłoby zastosowanie atrybutu [HttpPost] do metody kontrolera. Następnie skonfiguruj źródło danych, aby NIE korzystał z metody GET, w takim przypadku domyślnie będzie używać metody POST.

+0

Nie widziałem żadnych atrybutów "buforowania" związanych z operacjami odczytu w opakowaniu źródła danych – ZENIT

+0

tak to właśnie miałem na myśli ... nie można kontrolować buforowania poprzez konfigurację Datasource ... przez opakowanie ... musisz określić atrybuty działania kontrolera Read, które wywołuje otoki. –

+0

Jako obejście używam przeciążenia 'Read' przy użyciu parametru' routeValues', a następnie przekazywanie losowej wartości dla nieistniejącego atrybutu (np. Kpiny '& _ = 1234567890') – ZENIT

8

.read (czytaj => read.Action ("akcja", "Kontroler", nowy obszar = { "Area"}). Typ (HttpVerbs.Post))

+0

To jest poprawny sposób, aby powiedzieć, że twoja sieć Kendoui przesyła zapytanie do źródła danych za każdym razem, gdy wyświetla dane. Nie musisz też oznaczać działania kontrolera, aby zaakceptować post. – cobolstinks

+0

Pracował jak urok. Próbowałem [OutputCache (Duration = 0, NoStore = true)], próbowałem odświeżać siatkę, wyłączając caching na poziomie siatki Kendo (MVC), ale jak tylko wprowadziłem funkcję kontrolera dodam adnotację [HttpPost], wszystkie problemy (w tym stronicowania) został rozwiązany. Mogłem łatwo zmarnować kolejne 4 dni na to. Arigatou. –

12

Jesteś w stanie ustawić " cache 'atrybut w twoim Kendo dataSource na false, co najwyraźniej (UWAGA: tego nie przetestowałem) zmusi żądane strony do nowego pobrania na każde żądanie.

Ustawienie pamięci podręcznej na false powoduje dodanie do żądania parametru "_ = [TIMESTAMP]", który w razie potrzeby można przeanalizować po stronie serwera/kontrolera, aby uniknąć operacji po stronie pamięci podręcznej po stronie serwera.

Należy również zauważyć, że można określić zachowanie pamięci podręcznej na operację transportu Kendo (tj. Może ona być na poziomie operacji CRUD lub całego transportu).

Zobacz tutaj: http://docs.kendoui.com/api/framework/datasource#configuration-transport.read.cache-Boolean

Kod:

transport: { 
    read: { 
     cache: false 
    } 
} 
+1

Zamierzałem zmienić mój pomysł na użytkownika Kendo UI Grid, ponieważ wystąpił błąd podczas zmiany indeksu strony na siatce. To było po prostu wrócić do strony 1, gdy próbowałem zmienić indeks strony. Dzięki za odpowiedź. –

+1

Mówi powyżej, że używa opakowania MVC. Ta opcja nie jest dostępna przy użyciu opakowania. – Phil

+0

Świetnie, to oszczędza mój dzień. Dziękuję za wspaniałe badania. –

3

można spróbować ozdabiania działania stronie sterownika serwera, że ​​ładunki widok z

[OutputCache(Duration = 0, NoStore = true)] 

atrybutu, na przykład

public class OrdersController : Controller 
{ 
    [httpGet] 
    [OutputCache(NoStore = true, Duration = 0)] 
    public ActionResult Orders(string userId) 
    { 
     // your code 
     return View(viewModel); 
    } 
} 

NoStore - Wartość logiczna określająca, czy należy zapobiegać wtórnemu przechowywaniu poufnych informacji Duration - Czas w sekundach, w którym strona lub kontrola użytkownika jest przechowywana w pamięci podręcznej. Ustawienie tego atrybutu na stronie lub formancie użytkownika ustanawia zasady wygasania dla odpowiedzi HTTP z obiektu i automatycznie buforuje dane wyjściowe kontroli strony lub użytkownika.

Powiązane problemy