我有许多仅在工作流上下文中才有意义的 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 按钮,它会尝试重新发布表单。