在asp.net中维护viewstate时防止重复表单提交

在asp.net中维护viewstate时防止重复表单提交,asp.net,postback,post-redirect-get,Asp.net,Postback,Post Redirect Get,我有一个人们可以用来上传文件的表单,我想确保上传后按刷新按钮不会触发重复上传。我考虑的方法是会话变量和页面重定向post/redirect/get模式,但它们都有问题 会话变量 问题是它们在页面之间共享,所以如果用户使用相同的逻辑打开了多个页面,或者在不同的记录上打开了同一页面的多个副本,则可能会错误地检测到刷新。另一个问题是会话状态过期,因此不太可靠。不过,我会发布代码,以防对某人有所帮助。这个函数应该在页面on_load事件中调用,它的返回值被分配给一个变量,该变量在表单的提交事件中被选中

我有一个人们可以用来上传文件的表单,我想确保上传后按刷新按钮不会触发重复上传。我考虑的方法是会话变量和页面重定向post/redirect/get模式,但它们都有问题

会话变量

问题是它们在页面之间共享,所以如果用户使用相同的逻辑打开了多个页面,或者在不同的记录上打开了同一页面的多个副本,则可能会错误地检测到刷新。另一个问题是会话状态过期,因此不太可靠。不过,我会发布代码,以防对某人有所帮助。这个函数应该在页面on_load事件中调用,它的返回值被分配给一个变量,该变量在表单的提交事件中被选中

Private Function checkForRefreshOnLoadAfterPostback() As Boolean
    Dim refreshed As Boolean = (Page.IsPostBack AndAlso Session("GuidOnloadPostbackRefreshCheck") <> ViewState("GuidOnloadPostbackRefreshCheck"))
    Session("GuidOnloadPostbackRefreshCheck") = Guid.NewGuid().ToString()
    ViewState("GuidOnloadPostbackRefreshCheck") = Session("GuidOnloadPostbackRefreshCheck")
    Return refreshed
End Function
发布/重定向/获取

选项2是在处理表单提交后重定向页面,但是我的页面有带有其他表单控件的选项卡,如果可能,我希望保留这些控件的值。因此,我的问题是,如何维护页面的viewState,同时防止刷新后再次提交表单?是否有某种方法可以选择性地从页眉中删除数据