protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ViewState["isFirstClick"] = "1";
}
}
protected void btnAudduit_Click(object sender, EventArgs e)
{
if (ViewState["isFirstClick"].ToString() == "1")
{
ViewState["isFirstClick"] = "2";
//
//
}
}
当用户在第一次提交还未完成时,第二次点击同一个按钮,ViewState["isFirstClick"]的值应为2的,但实际ViewState["isFirstClick"]的值还是为1.
ViewState的值也是作为隐藏域存在页面里面的,提交的时候传给后台,你在后台才能看到它的值。
你第二次点的时候,页面还没来得及刷新,隐藏域里的值还是最开始的1,所以提交后值仍然是1。
那有什么方案在第二次点的时候并且数据还没有进行回传的时候解决这个问题。如果是全局变量这个方案的话,那就算了。
@东方人:
貌似必须用Session之类的,页面加载的时候生成一个随机数令牌,放隐藏域里并记录在Session里,提交的时候再与Session的比对,一样才保存,然后再干掉Session中令牌的值。
为什么要用ViewState去做这个事情呢?
你可以在客户端做这个防止用户的多次点击提交,给个提示呀,改变下按钮状态呀之类的。
我这显示为2啊,怎么会有问题?
protected void Button1_Click(object sender, EventArgs e)
{
ViewState["isFirstClick"] = (int.Parse(ViewState["isFirstClick"].ToString())+1).ToString();
Response.Write(ViewState["isFirstClick"].ToString());
if (int.Parse(ViewState["isFirstClick"].ToString()) > 1)
{
//警告不得重复提交
}
}
个人觉得,如果楼主的项目不是互联网公开的项目,这样的话,你可以在前台JS来控制按钮的可用不可用,就行了,不需要太复杂的控制