รีเฟรชเพจที่คลิกด้านหลัง - MVC 4

อะไรจะเป็นวิธีง่ายๆ ในการบังคับให้ ActionResult ของฉันเริ่มทำงานเสมอเมื่อฉันเข้าสู่หน้านี้ เมื่อคลิกย้อนกลับของเบราว์เซอร์ สิ่งนี้จะไม่ทำงาน

public ActionResult Index()
{
    //do something always

    return View();
}

person aw04    schedule 18.03.2014    source แหล่งที่มา


คำตอบ (3)


การปิดใช้งานแคชบน ActionResult บังคับให้เพจรีเฟรชแต่ละครั้งแทนที่จะเรนเดอร์เวอร์ชันแคช

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

    return View();
}

ตอนนี้เมื่อคุณคลิกปุ่มย้อนกลับของเบราว์เซอร์ สิ่งนี้จะถูกกดทุกครั้ง

person aw04    schedule 18.03.2014
comment
แล้วการใช้ VaryByParam = "None" ตามที่กล่าวไว้ ที่นี่ โอเคมั้ย? - person Shaiju T; 28.10.2015

คุณสามารถลองใช้ onunload เหตุการณ์และ 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
ฉันคิดเกี่ยวกับสิ่งนี้ ไม่แน่ใจว่าเป็นความคิดที่ดีหรือไม่ที่จะลองเปลี่ยนเส้นทาง onunload มีอะไรที่ฉันควรกังวลหรือนี่เป็นสิ่งที่ยอมรับได้ที่จะทำแบบข้ามเบราว์เซอร์ได้หรือไม่ นอกจากนี้ ฉันจะรู้ได้อย่างไรว่าผู้ใช้พยายามนำทางกลับ ฉันไม่ต้องการเปลี่ยนเส้นทางไปที่หน้านี้ทุกครั้ง - person aw04; 18.03.2014
comment
สิ่งเดียวที่คุณควรกังวลคือการกระทำของคุณจะถูกเรียกใช้เมื่อคลิกปุ่มย้อนกลับของเบราว์เซอร์และคลิกปุ่มรีเฟรช แม้ว่าคุณจะทำ postback บนเพจของคุณก็ตาม ฉันเคยเจอปัญหานี้และนี่เป็นวิธีเดียวที่ฉันสามารถแก้ไขได้ stackoverflow.com/q/21400594/2174170 - person Dumisani; 18.03.2014
comment
ขอบคุณ ลิงก์ไปยังคำถามของคุณมีประโยชน์ ฉันคิดว่าฉันไม่จำเป็นต้องใช้แนวทางที่รุนแรงเช่นนี้ในกรณีของฉัน ฉันสามารถทำอะไรบางอย่างในเหตุการณ์ที่พร้อมของ Index ของฉันได้ แทนที่จะออกจากหน้าถัดไป (แค่ไม่รู้ว่ามันคืออะไร) ฉันไม่อยากสัมผัสพฤติกรรมการคลิกย้อนกลับเริ่มต้นหากไม่จำเป็น :) - person aw04; 18.03.2014

การเพิ่มโค้ดนี้ลงใน HTML ของฉันทำงานได้ดีสำหรับฉัน:

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

สิ่งนี้อาจมีประโยชน์สำหรับผู้ที่ไม่ต้องการจัดการกับโค้ดฝั่งเซิร์ฟเวอร์ซึ่งต่างจากโซลูชันที่ยอมรับ

สิ่งเดียวที่ทำคือกำหนดค่าให้กับอินพุตที่ซ่อนอยู่ในการโหลดครั้งแรก ซึ่งจะยังคงอยู่ในการโหลดครั้งที่สอง ซึ่งในกรณีนี้เพจจะถูกบังคับรีเฟรช

person Ziad    schedule 03.06.2014