Segarkan Halaman di Klik Kembali - MVC 4

Apa cara sederhana untuk memaksa ActionResult saya agar selalu aktif saat saya membuka halaman ini? Pada klik kembali browser, misalnya, ini tidak akan dijalankan.

public ActionResult Index()
{
    //do something always

    return View();
}

person aw04    schedule 18.03.2014    source sumber


Jawaban (3)


Menonaktifkan cache pada ActionResult memaksa halaman untuk di-refresh setiap kali daripada merender versi cache.

[OutputCacheAttribute(VaryByParam = "*", Duration = 0, NoStore = true)]
public ActionResult Index()
{
    //do something always

    return View();
}

Sekarang ketika Anda mengklik tombol kembali browser, ini selalu terjadi.

person aw04    schedule 18.03.2014
comment
bagaimana dengan menggunakan VaryByParam = "None" seperti yang disebutkan di sini apa tidak apa-apa? - person Shaiju T; 28.10.2015

Anda dapat mencoba acara onunload dan ajax:

<script>
   window.onunload = function () {
      $.ajax({
         url: '/ControllerName/Index',
         type: 'POST',
         datatype: "json",
         contentType: "application/json; charset=utf-8"
      });
   };
</script>
person Dumisani    schedule 18.03.2014
comment
Saya memikirkan hal seperti ini, tidak yakin apakah mencoba mengalihkan onunload adalah ide yang bagus. Adakah yang perlu saya khawatirkan atau apakah ini merupakan hal yang dapat diterima untuk dilakukan dan berfungsi lintas-browser? Selain itu, bagaimana saya tahu bahwa pengguna mencoba menavigasi kembali? Saya tidak ingin selalu mengalihkan ke halaman ini. - person aw04; 18.03.2014
comment
Satu-satunya hal yang harus Anda khawatirkan adalah bahwa tindakan Anda akan dipanggil pada klik tombol kembali browser dan klik tombol segarkan. Bahkan ketika Anda melakukan beberapa postback di halaman Anda. Saya pernah menemukan masalah ini dan ini adalah satu-satunya cara saya bisa menyelesaikannya. stackoverflow.com/q/21400594/2174170 - person Dumisani; 18.03.2014
comment
Terima kasih, tautan ke pertanyaan Anda sangat membantu. Saya pikir saya tidak perlu mengambil pendekatan radikal dalam kasus saya. Saya dapat bertahan dengan sesuatu pada acara siap Indeks saya daripada ketika meninggalkan halaman berikutnya (hanya belum tahu apa itu). Saya lebih suka tidak menyentuh perilaku klik kembali default jika tidak perlu :) - person aw04; 18.03.2014

Menambahkan kode ini ke HTML saya berfungsi dengan baik untuk saya:

<input id="alwaysFetch" type="hidden" />
<script>
    setTimeout(function () {
        var el = document.getElementById('alwaysFetch');
        el.value = el.value ? location.reload() : true;
    }, 0);
</script>

Ini mungkin berguna bagi mereka yang memilih untuk tidak berurusan dengan kode sisi server dibandingkan dengan solusi yang diterima.

Yang dilakukannya hanyalah memberikan nilai ke input tersembunyi pada pemuatan pertama yang akan tetap ada pada pemuatan kedua dalam hal ini halaman akan disegarkan secara paksa.

person Ziad    schedule 03.06.2014