2017-07-31 9 views
1

私はASP.NET MVC Webサイトをビュー上にフォームを持っています。このフォームは、同じアクション(同じ属性の[HttpPost]とモデルのパラメータ)にポストバックします。これは、Ajax POSTではなく、従来のHTTP POSTを実行していることに注意してください。URLを変更せずにGETビューにリダイレクトするにはどうすればよいですか?

アクションPOSTアクションでデータが処理され、ユーザーに「ありがとう」ページが表示されますが、同じURLが使用されます。私は...アクションのPOSTバージョンの最後に次の操作を実行して、彼らがヒットした場合ことを意味し、POST編されているページに、ユーザーのブラウザを残ししかし

return View("ThankYou"); 

、これを行うことができますリフレッシュボタンを押すと、フォームは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); 
} 

と作成ビューでは:

(?= 1作成したURL)

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

それはTempDataをせずに行うことができますが、URLが少し変更されます

+0

ビューを切り替えて表示するのではなく、別のビューを返すだけですっきりしないでしょうか? – mason

+0

重要な部分は、OPが望んでいたURLを変更していない、コントローラまたはビューの場合は、あなたにそれを置くことができます – Omu

+0

@オムありがとう、それはまさに私が必要なものでした!私はできるだけ多くのロジックを可能な限り表示したいと思っていたので、コントローラで 'if 'を実行しましたが、コンセプトは同じでした。再度、感謝します。 – DreamingOfSleep

関連する問題