Ric*_*ick 3 asp.net postback back-button
我有一个网页,可以向多个用户发送电子邮件(在线分发列表).单击提交按钮并发送电子邮件后,将显示状态页面,其中列出已发送的电子邮件数,错误和其他信息.如果用户单击后退按钮,则会重新发送电子邮件.我怎么能阻止这个?
注:浏览器就提示用户"重新提交"或实际发送电子邮件之前"重新发送"数据页面,但不会从单击它,然后不知道为什么邮件的两个副本共出动停止我的用户.
环境:
Jør*_*ode 16
在您的代码中,在发送电子邮件的地点之后,执行302重定向到确认页面:
protected void btnSend_Click(object sender, EventArgs e)
{
SendManyEmails();
Response.Redirect("confirmation.aspx");
}
Run Code Online (Sandbox Code Playgroud)
使用这种代码,原始页面的POST不会在浏览器历史记录中结束.
这种常见模式称为Post/Redirect/Get模式.
这种模式的主要缺点是,在重定向用户时,处理POST请求的所有状态都会丢失 - 从而开始新的请求上下文.在ASP.NET中,这包括Page所有Control对象中的成员,以及存储在其中的所有内容ViewState.
如果您在处理POST请求时生成某种"状态对象"(可能是已发送邮件的日志),则需要某种方法来保存此对象以用于以下GET请求.一些Web框架具有专门用于此的功能:RoR具有flashASP.NET MVC TempData.ASP.NET表单没有内置的这样的概念,所以你必须自己解决一些问题.
将对象保存到SessionPOST上,在以下GET上读取和删除它将是解决此问题的一种方法.如果您在多个地方使用它,可以围绕此构建一个抽象,或者您可以在Web上搜索ASP.NET表单的flash/TempData的现有实现.