2009-01-06 133 views
2

如果需要回發到原始控制器進行渲染和重定向的同一控制器,是否認爲是更好的做法?或者,如果從視圖跳轉到不同的控制器,它是否一樣?Asp.net mvc:從視圖回來

回答

3

我在控制器中創建兩個重載操作,一個使用HTTP GET呈現輸入表單,另一個使用HTTP POST處理表單發佈。事情是這樣的:

public ViewResult Foo() 
    { 
    return View(); 
    } 

    [AcceptVerbs(HttpVerbs.Post)] 
    public ViewResult Foo(FormCollection form) 
    { 
    // process input 
    if (inputOK) 
     return RedirectToAction("Index"); 
    return View(); 
    } 

這樣做的好處這種方式是,如果有一個錯誤,認爲被重新呈遞任何錯誤和驗證消息。如果成功,則會重定向到另一個操作,這樣可以避免用戶刷新頁面時瀏覽器上的重複發佈警告 - 請參閱Post/Redirect/Get on Wikipediablog entry by Stephen Walther

還有其他方法可以使用FormCollection,例如一個簡單參數列表或綁定到一個對象。請參閱article by ScottGu

2

我認爲被調用的動作應該包含在該動作的相關控制器中。如果視圖需要調用動作,它應該從相關的控制器調用它,而不一定是從其生成的控制器。

如果您有庫存控制器,您不想定義與管理相關的操作,即使庫存屏幕可能對其有管理操作(例如)。