我有一个人们可以用来上传文件的表单,我想确保在上传后按下刷新按钮不会触发重复上传。我正在考虑的方法是会话变量和页面重定向(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?有没有办法有选择地从页眉中删除数据?