求救,很急,CHEKBOX控件选择问题
前台定义了14个checkbox控件,现在用户要选择6个控件来进行投票(只能选6个,不能多不能少),选上后点击投票按钮,被选中的人数据库票数就加1。
我自己写了段代码,运行后虽然没有报错,可是却得不到我想要的结果。
拜托各位高手,帮忙看下,或者写段代码分享下。再次感谢!
我的代码:
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语句执行呢?
[解决办法]
判断数量,尽量在客户端写,下面是代码:
<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>