私はPost-Redirect-Getパターンを使用しています。私のasp.netコアMVCのWebアプリで が、これは何が起こるかです:TempDataを使用せずにPOST要求が成功した後にリダイレクトした後にメッセージを表示
- ユーザーは、DBに項目を追加するPOSTを経由してフォームを送信します。
- コントローラは新しいアイテムを追加し、302/303のリダイレクトを "/ Home/Index/xxxx"にリダイレクトします(xxxxはアイテムのIDです)。
- 新しい要求(/ Home/Index/xxxx)がコントローラによって提供され、アイテムが表示されます。アドレスバーのアイテムのURLは、ユーザーがコピーして共有できるものです。
上記の手順3では、「Item added successfully」というメッセージを表示します。
これは(成功メッセージなし)私のコードです:
public async Task<IActionResult> Index(string id)
{
ItemView itemView = null;
if (string.IsNullOrEmpty(id))
itemView = new ItemView(); // Create an empty item.
else
itemView = await itemService.GetItemAsync(id);
return View(itemView);
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Index(ItemView itemView)
{
string id = await itemService.AddItemAsync(itemView);
return RedirectToAction("Index", "Home", new { id = id });
}
私はstackoverflowの上の他の回答に見られるこれを行うには、いくつかの方法があります。
- "/ Home/Index/xxxx?success = true"にリダイレクトします。アクションがsuccess = true paramを見ると、成功メッセージが表示されます。しかし、ユーザーがアドレスバーからURLをコピーして共有できるようにするため、余分なパラメータを使用することは望ましくありません。また、共有リンクをクリックした人は誰もが「アイテムが正常に追加されました」というメッセージが表示されるため、成功するパラメータを持つURLを共有する必要はありません。
- このpostは、良い解決策であるTempDataを使用することを示唆しています。可能であれば、私が避けたいと思うサーバー上でスティッキーな動作を可能にするためには、私には必要だと思います。
- おそらくreferrer urlを使用して、リクエストがフォーム提出の後に来たかどうかを判断できます。この場合、メッセージを表示できます。
ご使用のシナリオに応じて、私はTempDataを使用することをお勧めします。 – Dilip
これを投票した人は、理由を説明するコメントを残してもよろしいですか?あまりにも多くのタグを使用しましたか?あるいは、その質問は重複のように見えますか?私は徹底的な研究を行い、一般的に提案されている解決策(およびリンクされたもの)のいくつかを列挙し、なぜ私がまだ答えを探しているのかを説明しました。そしてスヌーピーの答えは、私が正しい解決策を見つけるのを助けました。 – Turbo
私は同様のジレンマにあった質問に同様の反応を示しました。私はその方法を知っていましたが、私はネットワークインフラストラクチャーのためにその方法のファンではなく、適切に実装する方法がわからない可能性のある選択肢からいくつかのアイディアを投げました。私は人々が "この人はどちらの方が良いかを尋ねているので、それは意見に基づくものであり、本当の質問ではない"と思っています。 「ちょっと、この男は少なくとも質問を投稿し、みんなに彼のためにそれを理解してもらう代わりに、可能な解決策を考えている」 –