2013-05-17 99 views
2

我在MVC中有一個名爲Action的View,它接受和ID作爲參數。我也有另一個叫Action的視圖,但它被標記爲HTTPPOST。在POST視圖後返回GET視圖失敗ASP.NET MVC

POST版本的Action可能會以編程方式失敗。當它失敗時,我想添加一個ModelError,然後重定向到GET版本的Action,同時我提供該ID。

總之=>我想從POST視圖轉移到GET視圖,並傳遞參數。沿線

ModelState.AddModelError("", "Could not verify token"); 
return RedirectToAction("Action", "ExpiredAccounts" new { aid = myId }); 

其中Action是視圖,ExpiredAccounts是控制器,AID是帳戶ID。這當然不行,因爲你可以添加一個模型錯誤的觀點,而不是重定向

感謝

+0

你爲什麼要這樣做?如果失敗,爲什麼不在POST上返回模型錯誤? – Matt

回答

7

你最好返回相同的觀點在這種情況下,而不是重定向:

ModelState.AddModelError("", "Could not verify token"); 
var model = repository.Get(myId); 
return View(model); 

所述Redirect-After-Post圖案的正確的流量如下:

  1. GET請求 - >顯示某種形式
  2. POST請求 - >表單被提交給服務器。這裏有兩種可能的情況:
    • 驗證成功=>重定向。
    • 驗證失敗=>重新顯示了同樣的觀點,這樣如果你想違反重定向時,你總是可以發送錯誤消息作爲查詢字符串參數此最佳實踐,用戶可以修復錯誤

return RedirectToAction(
    "Action", 
    "ExpiredAccounts" 
    new { aid = myId, error = "Could not verify token" } 
); 

,然後在側目標動作驗證該參數是否已被提供,並添加一個錯誤給的ModelState:

public ActionResult Action(int myId, string error) 
{ 
    if (!string.IsNullOrEmpty(error)) 
    { 
     ModelState.AddModelError("", error); 
    } 
    ... 
} 
+0

好的 - 我沿着Darin Dimitrov的方向做了一些事情。問題是我在GET請求中有很多代碼。因此,我將Get請求放入私有方法中,並且我從GET方法調用它,並在POST失敗時調用它。 –