.NET网站实例之投票系统

该实例使用的是2026世界杯竞彩动态生成投票的方式,当选择某一项投票后,自动生成投票标题和选项。投票防作弊通用两种方法,IP判断和cookie判断。该实例共有三个页面(投票页面,查看结果页面,投票管理页面,2026世界杯竞彩),一个类(DB.cs)。 
在DB中有GetCon(配置连接字符串并返回SqlConnection),ExSql(执行sql语句并返回Bool显示是否成功),reDs(查询数据库并返回DataSet)三个方法。

在投票页面中有labVoteTitle(投票标题Label控件),rblVoteItem(投票选项RadioButtonList控件),btnVote(我要投票Button控件),btnResult(查看结果Button控件)。 
cs代码:


public static string M_Str_voteID; 
   
protected void Page_Load(object sender, EventArgs e) 
   

       
if (!IsPostBack) 
       

           
//获取用户选择的投票标题 
           M_Str_voteID=Request[voteID]; 
           
//绑定投票标题和投票选项 
           labBind(); 
           rblBind(); 
       }
 
   }
 
   
//绑定Label控件 
   private void rblBind() 
   

       DataSet ds 
= DB.reDs(select voteTitle from tb_Vote where voteID=+M_Str_voteID); 
       labVoteTitle.Text 
= ds.Tables[0].Rows[0][0].ToString(); 
   }
 
   
//绑定RadioButtonList控件 
   private void labBind() 
   

       DataSet ds 
= DB.reDs(select * from tb_Vote where voteID= + M_Str_voteID); 
       rblVoteItem.DataSource 
= ds; 
       
//voteContent字段绑定到text,voteItemID绑定到value 
       rblVoteItem.DataTextField = voteContent
       rblVoteItem.DataValueField 
= voteItemID
       rblVoteItem.DataBind(); 
   }
 
//2026世界杯竞彩 
protected void btnVote_Click(object sender, EventArgs e) 
   

       
//投票防作弊 
       HttpCookie makecookie = new HttpCookie(Vote + M_Str_voteID);//创建cookie 
       HttpCookie readcookie = Request.Cookies[Vote + M_Str_voteID];//读取cookie 
       if (readcookie == null
       

           
//从未投过票的话,将参与投票的标题放进cookie,并设置过期时间 
           makecookie.Values.Add(VoteItem< + M_Str_voteID + >); 
           makecookie.Expires 
= DateTime.MaxValue; 
       }
 
       
else 
       

           
//读取已投票的项 
           string P_Str_AllItem = readcookie.Values[VoteItem].ToString(); 
           
//如果未对该主题投过票,将该主题添加到cookie中 
           if (P_Str_AllItem.IndexOf(< + M_Str_voteID + >== 1
           

               makecookie.Values.Add(
VoteItem, readcookie.Values[VoteItem+ < + M_Str_voteID + >); 
           }
 
           
else 
           

               Response.Write(
<script language=javascript>alert(‘该主题你已经投过票,不能重新投票!’);</script>); 
               
//这里return很关键,直接跳出btnVote_Click事件 
               return
           }
 
       }
 
       
//执行投票操作,票数+1 
       string P_Str_voteItemID = this.rblVoteItem.SelectedValue; 
       
string P_Str_cmdtxt = update tb_VoteItem set voteTotal=voteTotal+1 where voteItemID= + P_Str_voteItemID +  and voteID= + M_Str_voteID; 
       
bool P_Bl_reVal = DB.ExSql(P_Str_cmdtxt); 
       
if (P_Bl_reVal) 
       

           
//写入cookie 
           Response.AppendCookie(makecookie); 
           
//在新窗口中弹出投票结果 
           Response.Write(<script language=javascript>alert(‘投票成功,感谢你的支持!’);windows.open(‘VoteResult.aspx?voteID= + M_Str_voteID + &title= + Server.UrlEncode(labVoteTitle.Text) + ‘,’new’);</script>); 
       }
 
       
else 
       

           Response.Write(
<script language=javascript>alert(‘投票失败!’);</script>); 
       }
 
   }
 
   
//查看2026世界杯竞彩结果按钮 
   protected void btnResult_Click(object sender, EventArgs e) 
   

       Response.Write(
<script language=javascript>alert(‘投票成功,感谢你的支持!’);windows.open(‘VoteResult.aspx?voteID= + M_Str_voteID + &title= + Server.UrlEncode(labVoteTitle.Text) + ‘,’new’);</script>); 
   }

命运负责洗牌,但是玩牌的是我们自己!


原文:fun88.com