为了解决.NET重复提交问题,网络也搜索了很久,找到这个page扩展类,感觉还是不错的。
共享给大家看看
具体使用只需要页面继承这个扩展类 然后在提交的方法内做个判断
if(!this.IsRefreshed){
第一次提交 执行具体提交代码
}
else{
重复提交 可以报个错误提示或者抛出异常!~
}
这里的IsRefreshed是扩展类中的bool属性 如果为false 说明是第一次提交 否则是重复提交 不做处理了
具体代码如下:
1
using System;
2
using System.Collections.Generic;
3
using System.Text;
4
/**/
5
/// <summary>
6
/// 名称:SubmitOncePage
7
/// 父类:System.Web.UI.Page
8
/// 描述:解决浏览器刷新造成的数据重复提交问题的page扩展类。
9
/// 示例: if (!this.IsRefreshed)
10
/// {
11
/// //具体代码
12
/// }
13
/// 原创:丛兴滋(cncxz) E-mail:cncxz@126.com
14
/// </summary>
15
namespace SPA.Common
16
{
17
public class SubmitOncePage : System.Web.UI.Page
18
{
19
private string _strSessionKey;
20
private string _hiddenfieldName;
21
private string _strLastViewstate;
22
public SubmitOncePage()
23
{
24
_hiddenfieldName = "__LastVIEWSTATE_SessionKey";
25
_strSessionKey = System.Guid.NewGuid().ToString();
26
_strLastViewstate = string.Empty;
27
28
}
29
30
public bool IsRefreshed
31
{
32
get
33
{
34
string str1 = this.Request.Form["__VIEWSTATE"];
35
_strLastViewstate = str1;
36
string str2 = this.Session[GetSessinKey()] as string;
37
bool flag1 = (str1 != null) && (str2 != null) && (str1 == str2);
38
return flag1;
39
}
40
}
41
42
protected override void Render(System.Web.UI.HtmlTextWriter writer)
43
{
44
string str = GetSessinKey();
45
this.Session[str] = _strLastViewstate;
46
ClientScript.RegisterHiddenField(_hiddenfieldName, str);
47
base.Render(writer);
48
}
49
50
51
private string GetSessinKey()
52
{
53
string str = this.Request.Form[_hiddenfieldName];
54
return (str == null) ? _strSessionKey : str;
55
}
56
57
58
}
59
60
}
61


浙公网安备 33010602011771号