|G|第三帖,Session和ViewState的效果不一样
cpp2017 木百胸
代码:用Session
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
Session[ "CanClick "] = true;
}
}
/// <summary>
/// Right
/// </summary>
/// <param name= "sender "> </param>
/// <param name= "e "> </param>
protected void Button1_Click(object sender, EventArgs e)
{
if ((bool)Session[ "CanClick "])
{
//do something
string strConn = @ "data source=admin\SQLEXPRESS;initial catalog=hexiesoft;persist security info=False;user id=sa;password=6503;packet size=4096;pooling=true; ";
string sQuery = "insert into testClick(i,memo) values (2, 'test ') ";
SqlConnection conn = new SqlConnection(strConn);
conn.Open();
SqlDataAdapter da = new SqlDataAdapter(sQuery, conn);
DataSet ds = new DataSet();
da.Fill(ds);
conn.Close();
Session[ "CanClick "] = false;
}
else
{
Response.Write( "不可多次点击! ");
}
}
========
没有问题 打死也执行不了2次!
然后我改成ViewState 如果点的快的话,就会执行多次!
为什么 ?
[解决办法]
因为viewstate在页面上存储 , session 存在服务器的内存中
点击多次时 viewstate 还没来得及提交
[解决办法]
viewstate是与客户端的hidden有关,当用户多次提交或刷新时,提交到服务器的数据是完全一样的,因为viewstate也是完全一样.但session不一样,他的数据是保存在服务器的内存中
[解决办法]
Session和Viewstate就是不一样啊!
嗯。对了,是的,就是这样的啊!哈哈。。。
[解决办法]
要防止插入相同的纪录,这些都不能完全保证,要在数据库上想办法
[解决办法]
就是你的点击频率间隔时间小于服务器响应客户端的时间,使用ViewState时就会这样。