页面刷新导致ASP.NET应用程序中的重复POST

Ann*_*nie 12 asp.net

我有一个应用程序,我在其中添加一个新记录,如果我按下刷新按钮,记录将被添加两次.

我正在清除缓存,但我遇到了同样的问题.该怎么办?

Dav*_*d M 10

将帖子处理回页面后,最佳做法是重定向,这样您就无法使用"刷新"按钮再次发布数据.这对所有Web开发都很常见,而不仅仅是ASP.NET.


Chr*_*uts 7

我的方法是无耻地从第4页被盗对ASP联盟真棒文章.要检测刷新,可以在ViewState和Session中存储相同的值.如果用户刷新页面,它将使用与您的会话值不匹配的旧ViewState数据进行PostBack.一旦检测到这一点,您就可以使用一个简单的变量创建一个所有其他Pages继承的页面,以测试用户是否刷新了浏览器.此解决方案需要启用ViewState和有效的会话.

protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);

    if (IsPostBack && ViewState[REFRESH_CHECK_GUID] != Session[REFRESH_CHECK_GUID])
    {
        IsRefresh = true;
    }
    Session[REFRESH_CHECK_GUID] = System.Guid.NewGuid().ToString();
    ViewState[REFRESH_CHECK_GUID] = Session[REFRESH_CHECK_GUID];
}

/// <summary>
/// True if the last PostBack was caused by a Page refresh.
/// </summary>
public virtual bool IsRefresh
{
    get;
    private set;
}
Run Code Online (Sandbox Code Playgroud)


Ed *_*ess 1

如果应用程序是您的,您需要添加代码,在尝试将记录保存到数据库之前首先检查该记录是否不存在。