2017-07-31 87 views
1

我有一個ASP.NET MVC網站,一個視圖上的窗體。表單回到相同的行爲(顯然是[HttpPost]屬性和模型的參數)。請注意,這是在做一個傳統的HTTP POST,而不是一個Ajax POST如何在不更改URL的情況下重定向到GET視圖?

POST操作處理數據,我想向用戶顯示「謝謝」頁面,但使用相同的URL。我可以通過的POST版動作結束執行以下操作做到這一點...

return View("ThankYou"); 

然而,這表示還有一直POST版頁面上的用戶的瀏覽器,這意味着,如果他們打的刷新按鈕,它是POST的形式。我需要避免這種情況。

有沒有簡單的方法來做到這一點?我想我可以創建一個全新的動作,一個全新的視圖模型,用當前視圖的信息填充視圖模型,然後重定向到該動作,傳遞新的視圖模型,但是對於某些東西來說它似乎有很多工作這感覺應該是簡單的。

+0

您應該瞭解[Post-Direct-Get模式](https://en.wikipedia.org/wiki/Post/Redirect/Get)。 – mason

+0

聽起來像一些js腳本的工作。 – GibralterTop

+0

@GibralterTop謝謝,但不應該在服務器上完成所有這些?我以爲Angular是客戶端的東西 – DreamingOfSleep

回答

2

是這樣的:

public ActionResult Create() 
{ 
    return View(); 
} 

public ActionResult Create(CreateInput input) 
{ 
    if(ModelState.IsValid){ 
    // save 
    TempData["created"] = true; 
    return RedirectToAction("Create") 
    } 
    return View(input); 
} 

,並在創建視圖:

if(TempData["created"] != null){ 
    @<text>Thank You </text> 
}else{ 
... the form 
} 

它可以在不TempData的進行,但該網址會有所改觀的

(URL創建= 1?)
+0

只是爲了返回不同的視圖,而不是視圖切換它顯示的內容會不會更清晰? – mason

+0

重要的部分是不改變OP的想要的網址,你可以把如果控制器或在視圖中,這取決於你 – Omu

+0

@Omu謝謝,這正是我需要的!碰巧,我在控制器中做了「if」,因爲我希望儘可能多地保留邏輯,但概念是一樣的。再次感謝。 – DreamingOfSleep

相關問題