2010-01-02 28 views
6

我在我的控制器中爲HttpPost創建了一個動作。在該動作中,我在db中插入記錄,然後返回一個指定不同動作名稱的視圖,因爲我想把用戶帶到其他地方,比如他們剛創建的記錄的詳細信息視圖,然後傳入目前的模式,所以我不必重新加載他們剛輸入的數據。不幸的是,地址欄中的網址仍然顯示原始創建操作。asp mvc:指定視圖名稱不會改變url

[HttpPost] 
public ActionResult Create(MyModel model) 
{ 
    //Insert record 
    ... 
    //Go to details view, pass the current model 
    //instead of re-loading from database 
    return View("Details", model); 
} 

如何獲得url顯示 「http://myapp/MyController/Details/1」,而不是 「http://myapp/MyController/Create/1」?是否有可能,還是我必須做一個重定向?我希望我可以避免重定向...

回答

4

你必須做一個重定向來更改瀏覽器中的URL。

您傳入的視圖名稱僅告訴MVC要呈現哪個視圖。這是你的應用程序的實現細節。

的代碼看起來是這樣的:

[HttpPost] 
public ActionResult Create(MyModel model) 
{ 
    //Insert record 
    ... 
    return RedirectToAction("Details", new { id = model.ID }); 
} 

其中的一個原因,你在這裏做一個重定向是爲了讓用戶可以在瀏覽器中點擊刷新按鈕,並沒有得到那個討厭的「你想再次發佈數據「對話框。

此行爲通常稱爲「Post-Redirect-Get」或簡稱爲「PRG」。請參閱維基百科的文章PRG更多信息:Post/Redirect/Get