2010-05-27 87 views
1

我有一個ASP.Net調查問卷應用程序,它將數據重新提交到同一頁面,每次顯示不同的問題。有BACK和NEXT按鈕在問題之間導航。檢測瀏覽器刷新與ASP.Net中的表單提交MVC 2

我想檢測表單由於瀏覽器刷新而被提交,而其中一個按鈕被按下。我碰到一個WebForms approach但不知道如何應用這些原理在MVC 2的應用,因爲頁面的事件是不可用(據我知道......我是很新,微軟的MVC模式)。

如何將一個原則適用於MVC 2?有沒有更好的方法來檢測刷新?

回答

5

您可以使用TempData後重定向模式。例如:

  1. 的返回和下一步按鈕柱的形式向控制器動作
  2. 控制器動作將一些狀態到TempData並重定向到另一個控制器動作,這將驗證數據是在TempData並返回查看
  3. 用戶在瀏覽器上按F5,先前的操作在GET上調用,並且狀態不再變爲TempData您知道用戶按下了F5並且沒有通過表單提交。

,並說明這一點:

public class HomeController: Controller 
{ 
    public ActionResult Index() 
    { 
     var state = TempData["state"]; 
     if (state == null) 
     { 
      // the user directly arrived on this action without passing 
      // through the form submission 
     } 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult Index(string back) 
    { 
     TempData["state"] = new object(); 
     return RedirectToAction("Index"); 
    } 
} 
+0

@Darin:當我刷新頁面,我看到默認提交按鈕包含在表單變量。我是新來的,但不'索引(字符串返回)'依靠提交按鈕不是發佈的數據的一部分? – 2010-05-27 06:00:00

+0

什麼'形式'變量?我所包含的'back'參數可以用來檢測窗體上哪兩個提交按鈕被按下(NEXT或PREV)。你可以在同一個表單中有兩個提交按鈕,並給它們不同的名稱。例如:''。然後,您可以檢查'back'參數是否爲空或空,以瞭解兩個按鈕中的哪一個被點擊。 – 2010-05-27 06:03:14

+0

@Darin:我的兩個按鈕目前名爲Back和Next。當我點擊刷新時,Forms [「Next」]包含一個值。 – 2010-05-27 06:09:54