首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

,很急CHEKBOX控件选择有关问题

2012-09-07 
求救,很急,CHEKBOX控件选择问题前台定义了14个checkbox控件,现在用户要选择6个控件来进行投票(只能选6个,

求救,很急,CHEKBOX控件选择问题
前台定义了14个checkbox控件,现在用户要选择6个控件来进行投票(只能选6个,不能多不能少),选上后点击投票按钮,被选中的人数据库票数就加1。

我自己写了段代码,运行后虽然没有报错,可是却得不到我想要的结果。

拜托各位高手,帮忙看下,或者写段代码分享下。再次感谢!

我的代码:

C# code
 protected void Button1_Click(object sender, EventArgs e)    {        //投票防作弊        if (Session["UserID"] == null )        {            Response.Write("<script language=javascript>alert('您还未登录');</script>");             Response.Redirect("<script>window.location.href='Default.aspx';</script>");        }        else        {            if (Convert.ToBoolean(Session["Role"]))//已经投过票            {                Response.Write("<script language=javascript>alert('你已经成功投过票,不能重新投票!');</script>");                return;            }            else//还没投过票,执行投票操作,票数加1            {                int num1 = 0;                 foreach (Control c in this.Controls)                {                    if (c is CheckBox && ((CheckBox)c).Checked)                    {                        num1++;                    }                }                if (num1 > 0)                {                    if (num1 < 6)                    {                        Response.Write(CC.MessageBox(string.Format("共有{0}人被选中,请继续选足6人", num1.ToString())));                    }                    else if (num1 == 6)                    {                                                    int i = 1; string[] strarr = new string[5]; int j = 0;                                                             foreach (Control a in this.Controls)                                {                                    if (a is CheckBox && ((CheckBox)a).Checked&&(i < 15))                                    {                                        string P_Str_voteItemID = ((CheckBox)a).ID;                                        string P_Str_cmdtxt = "update tb_VoteItem set voteTotal=voteTotal+1 where voteItemID=" + P_Str_voteItemID;                                        strarr[j] = Convert.ToString(i);                                                                                CC.ExSql(P_Str_cmdtxt);                                        i++;                                        j++;                                    }                                    else                                    {                                        i = i + 1;                                    }                                }                        string ttt = string.Join(",", strarr );                                                                           string P_Str_cmdtxt1 = "update tb_User set Role=1 where UserID=" + M_Str_voteID;                        string P_Str_cmdtxt2 = "update tb_User set Choose= '" + ttt + "' where UserID=" + M_Str_voteID;                        string P_Str_cmdtxt3 = "update tb_User set VoteDate='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "' where UserID=" + M_Str_voteID;                        CC.ExSql(P_Str_cmdtxt1);                        CC.ExSql(P_Str_cmdtxt2);                        CC.ExSql(P_Str_cmdtxt3);                        Response.Write("<script>alert('投票成功,感谢您的支持!');</script>");                    }                    else                    {                         Response.Write(CC.MessageBox("您选择的选手已经超过6名"));                    }                }                else                {                     Response.Write(CC.MessageBox("请选择参赛选手"));                }            }        }    }




[解决办法]
达不到你要的效果,指的是哪一部分逻辑出错呢?设置断点先确定哪一部分的问题。在我看来,这一句有点问题:


 if (a is CheckBox && ((CheckBox)a).Checked&&(i < 15))不成立时,你的代码中i也是增加1的,这样如果页面有其它控件的情况下,是否会造成i>15时,仍有页面checkbox未被遍历到?
还有
string P_Str_cmdtxt1 = "update tb_User set Role=1 where UserID=" + M_Str_voteID;
string P_Str_cmdtxt2 = "update tb_User set Choose= '" + ttt + "' where UserID=" + M_Str_voteID;
string P_Str_cmdtxt3 = "update tb_User set VoteDate='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "' where UserID=" + M_Str_voteID;
CC.ExSql(P_Str_cmdtxt1);
CC.ExSql(P_Str_cmdtxt2);
CC.ExSql(P_Str_cmdtxt3);
为什么不写成一条SQL语句执行呢?
[解决办法]
判断数量,尽量在客户端写,下面是代码:

C# code
<script  language="javascript" type="text/javascript">     function check()     {       var x=0;       var chkArray = window.document.getElementsByTagName("input");        for(var i = 0; i< chkArray.length; i++)            {                if(chkArray[i].type != "checkbox")                {                    continue;                }                if(chkArray[i].checked)                {                   x++;                }            }            if(x<6 || x>6)            {             alert('必须是6个!');return false;            }     }    </script> 

热点排行