.NET网站实例之投票系统

该实例使用的是动态生成投票的方式,当选择某一项投票后,自动生成投票标题和选项。投票防作弊通用两种方法,IP判断和cookie判断。该实例共有三个页面(投票页面,查看结果页面,投票管理页面),一个类(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(); 
   }
 
//投票按钮 
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>"); 
       }
 
   }
 
   
//查看结果按钮 
   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>"); 
   }

 

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


原文:http://www.cnblogs.com/shanymen/archive/2009/05/28/1491242.html

合作伙伴