首页新闻找找看学习计划

用viewstate对象防止用户多次点击按钮进行多次提交,viewstate值不变。

0
悬赏园豆:50 [已解决问题] 解决于 2012-08-31 12:29

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.

千里兰杜的主页 千里兰杜 | 初学一级 | 园豆:65
提问于:2012-08-21 12:46
< >
分享
最佳答案
0

ViewState的值也是作为隐藏域存在页面里面的,提交的时候传给后台,你在后台才能看到它的值。

你第二次点的时候,页面还没来得及刷新,隐藏域里的值还是最开始的1,所以提交后值仍然是1。

收获园豆:40
向往-SONG | 老鸟四级 |园豆:4853 | 2012-08-21 13:35

那有什么方案在第二次点的时候并且数据还没有进行回传的时候解决这个问题。如果是全局变量这个方案的话,那就算了。

千里兰杜 | 园豆:65 (初学一级) | 2012-08-21 14:17

@东方人: 

貌似必须用Session之类的,页面加载的时候生成一个随机数令牌,放隐藏域里并记录在Session里,提交的时候再与Session的比对,一样才保存,然后再干掉Session中令牌的值。

向往-SONG | 园豆:4853 (老鸟四级) | 2012-08-21 14:33
其他回答(3)
0

为什么要用ViewState去做这个事情呢?

你可以在客户端做这个防止用户的多次点击提交,给个提示呀,改变下按钮状态呀之类的。

Ethan轻叹 | 园豆:996 (小虾三级) | 2012-08-21 15:55
0

我这显示为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)
        {
            //警告不得重复提交
        }
    }

happydaily | 园豆:674 (小虾三级) | 2012-08-21 18:22
0

个人觉得,如果楼主的项目不是互联网公开的项目,这样的话,你可以在前台JS来控制按钮的可用不可用,就行了,不需要太复杂的控制

收获园豆:10
chenping2008 | 园豆:9836 (大侠五级) | 2012-08-21 20:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册