2013-01-17 44 views
0

我有一個關於ASP.NET MVC 4中的獲取和發佈過程的問題。 我確定經常談論,但搜索這個主題並不容易。過程獲取和發佈

讓我試着解釋一下:

我開始用標準方法控制:

[HttpGet] 
    public ActionResult Item() 

所以,在這個功能我獲取了很多重要的數據,例如用戶ID等。 就我而言,我甚至在我的viewbag()中收集數據來決定是否顯示錶單。現在

,如果我開始一個回:

 [HttpPost] 
    public ActionResult Item(FormCollection formCollection) 

()的函數回到給出的標準視圖。

現在的問題,該職位方法之後,業務邏輯(檢索用戶ID等)GET方法不叫......我試圖與解決它

return this.RedirectToAction("Item"); 

但是這真的是從開始(get)開始重複邏輯的解決方案嗎?我怎樣才能把post方法中的新值賦給get方法?

最好的問候, 帕特里克

回答

1

這種模式被稱爲Post/Redirect/Get

要將附加數據傳遞給GET方法,您可以使用TempData和MvcContrib中的ModelStateToTempDataAttribute - 如果返回Redirect,它將ModelState傳遞給tempdata,如果返回View,則將tempdata傳遞給modelstate。

[HttpGet] 
[ModelStateToTempData] 
public ActionResult Item(int id) 
{ 
    // prepare view 

    return View(); 
} 

[HttpPost] 
[ModelStateToTempData] 
public ActionResult Item(FormCollection formCollection) 
{ 
    // do some business logic 
    int id = service.DoBusinessLogicAndReturnSomeId(); 

    return this.RedirectToAction("Item", new { id }); 
} 

您應該避免在GET中擁有業務邏輯。所有業務邏輯都應該放在POST方法中,並且在調用該方法後,您可以在準備好視圖的位置重定向到GET。

+0

這是我的情況的標準模式? – Patrik