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

相关问题