我有一个表格,允许用户键入数据,然后提交。 如果在这个操作结果中一切正常,那么我会将用户重定向到一个感谢页面。如何处理表单提交ASP.NET MVC后退按钮?
我现在的问题是,当用户点击后退按钮时,他们将能够返回到表单页面,输入仍然会在那里。
如果用户再次点击提交,我会得到一些潜在的奇怪的错误。
所以在asp.net mvc方面,处理用户点击后退按钮的最佳方式是什么?
的感谢!
我有一个表格,允许用户键入数据,然后提交。 如果在这个操作结果中一切正常,那么我会将用户重定向到一个感谢页面。如何处理表单提交ASP.NET MVC后退按钮?
我现在的问题是,当用户点击后退按钮时,他们将能够返回到表单页面,输入仍然会在那里。
如果用户再次点击提交,我会得到一些潜在的奇怪的错误。
所以在asp.net mvc方面,处理用户点击后退按钮的最佳方式是什么?
的感谢!
“潜在的奇怪错误”是什么意思?我怀疑用户会再次点击提交,除非他们想再次发布完全相同的内容。我不希望发布重复帖子,请在发布前根据您的数据库检查内容。
如果你真的不希望有人发帖相同的形式两次,把一个随机生成的数字(只是确保它足够随机以避免碰撞,或使用类似的用户ID的组合和精确的时间戳)保存到一个隐藏字段中,保存这些数据并在保存之前检查它在数据库中是否已经存在。
该解决方案完全适用,那么整个控制器或一个特定的动作,只需添加[NoCache的]
/// <summary>
/// Prevent a controller or specific action from being cached in the web browser.
/// For example - sign in, go to a secure page, sign out, click the back button.
/// <seealso cref="https://stackoverflow.com/questions/6656476/mvc-back-button-issue/6656539#6656539"/>
/// </summary>
public class NoCacheAttribute : ActionFilterAttribute
{
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
var response = filterContext.HttpContext.Response;
response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
response.Cache.SetValidUntilExpires(false);
response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
response.Cache.SetCacheability(HttpCacheability.NoCache);
response.Cache.SetNoStore();
}
}
并在代码:
[NoCache]
[Authorize]
public class AccountController : Controller
{ ... }
原本张贴在这里:MVC Back button issue
由于asp.net mvc是无状态的,我只是想,也许他们有一个新的shebang方法或最佳实践来处理这个问题。 – melaos 2010-04-13 16:51:14
当人们声称某种方法是“最佳实践”时,我不喜欢。 – 2010-04-13 17:09:01
哈哈是真的,但有丑陋的黑客,然后有更好的尝试和测试替代品的使用。我尽量避免前者。 – melaos 2010-04-14 00:54:53