ワークフローのコンテキストでのみ意味をなす MVC ビューがいくつかあります。たとえば、ユーザーが別のページで情報を送信すると、「成功」のみを表示するページにリダイレクトされます。
リダイレクトは GET であるため、ユーザーが URL を調整して手動でページに移動するのを止める方法はありません。
この状況で私は何をすべきですか?エラー ページにリダイレクトし、空白のページを表示しますか?
ワークフローのコンテキストでのみ意味をなす MVC ビューがいくつかあります。たとえば、ユーザーが別のページで情報を送信すると、「成功」のみを表示するページにリダイレクトされます。
リダイレクトは GET であるため、ユーザーが URL を調整して手動でページに移動するのを止める方法はありません。
この状況で私は何をすべきですか?エラー ページにリダイレクトし、空白のページを表示しますか?
私の意見では、ブラウザの URL から提供されることを意図していないため、成功情報ビューにはルートを含める必要はありません。私たちのプロジェクトでは、通常、成功ビューを投稿アクションから直接返します。たとえば、
[HttpPost]
public ActionResult ChangePassword(ChangePasswordModel model)
{
if (ModelState.IsValid)
{
bool changePasswordSucceeded;
try
{
MembershipUser currentUser = Membership.GetUser(User.Identity.Name, userIsOnline: true);
changePasswordSucceeded = currentUser.ChangePassword(model.OldPassword, model.NewPassword);
}
catch (Exception)
{
changePasswordSucceeded = false;
}
if (changePasswordSucceeded)
{
var infoModel = new AnyInfoModel();
return View("ChangePasswordSuccess", infoModel); // This is not redirected, but success shown in the current route url.
}
else
{
ModelState.AddModelError("", "The current password is incorrect or the new password is invalid.");
}
}
return View(model);
}
しかし、これには欠点もあります。ユーザーが誤ってブラウザーの F5 ボタンを押した場合、フォームを再投稿しようとします。