《ASP.NET1200例》实现投票的用户控件

用户控件ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="249VoteControl.ascx.cs" Inherits="FirstWeb._249VoteControl1" %>
您对公司餐饮服务是否满意?
<asp:RadioButtonList ID="RadioButtonList1" runat="server">
    <asp:ListItem Value="0">非常满意</asp:ListItem>
    <asp:ListItem Value="1">比较满意</asp:ListItem>
    <asp:ListItem Value="2">一般</asp:ListItem> 
</asp:RadioButtonList>
<asp:Button ID="Button1" runat="server" Text="我要投票" onclick="Button1_Click" />
<asp:Button ID="Button2" runat="server" Text="查看结果" onclick="Button2_Click" />

控件后台代码ascx.cs

/// <summary>
    /// 将投票数量写入文件,然后读取出来显示投票结果
    /// </summary>
    public partial class _249VoteControl1 : System.Web.UI.UserControl
    {
        public static int readCount(String fielPath)
        {
            int count = 0;
            StreamReader sr = File.OpenText(fielPath) ;
            while (sr.Peek() != -1)
            {
                count =int.Parse( sr.ReadLine().ToString());
            }
            sr.Close();
            return count;
        }

        public static void addCount(String filePath)
        {
            int count = readCount(filePath);
            StreamWriter sw = new StreamWriter(filePath,false);
            count = count + 1;
            sw.WriteLine(count);
            sw.Close();
        
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            String userIp = Request.UserHostAddress.ToString();
            HttpCookie oldCookie = Request.Cookies["ipCookie"];
            if (oldCookie == null)
            {
                int flag = RadioButtonList1.SelectedIndex;//---
                switch (flag)
                {
                    case 0: addCount(Server.MapPath("Vote1.txt")); break;
                    case 1: addCount(Server.MapPath("Vote2.txt")); break;
                    case 2: addCount(Server.MapPath("Vote3.txt")); break;
                }
                Page.ClientScript.RegisterStartupScript(this.GetType(),"","alert('投票成功,感谢您的参与');",true);
                HttpCookie newCookie = new HttpCookie("ipCookie");
                newCookie.Values.Add("Ip", userIp);
                newCookie.Expires = DateTime.Now.AddSeconds(5);//Cookie 的过期时间设置为当前时间之后5秒
                Response.AppendCookie(newCookie);  //---
            }
            else
            {
                if (oldCookie.Values["Ip"].ToString().Trim() == userIp.Trim())
                {
                    Page.ClientScript.RegisterStartupScript(this.GetType(), "", "alert('同一个IP只能投票一次');", true);
                }

                int flag = RadioButtonList1.SelectedIndex;   //---
                switch (flag)
                {
                    case 0: addCount(Server.MapPath("Vote1.txt")); break;
                    case 1: addCount(Server.MapPath("Vote2.txt")); break;
                    case 2: addCount(Server.MapPath("Vote3.txt")); break;
                }
                Page.ClientScript.RegisterStartupScript(this.GetType(), "", "alert('投票成功,感谢您的参与');", true);
                HttpCookie newCookie = new HttpCookie("ipCookie");
                newCookie.Values.Add("Ip", userIp);
                newCookie.Expires = DateTime.Now.AddSeconds(5);//Cookie 的过期时间设置为当前时间之后5秒
                Response.AppendCookie(newCookie);    //---
            }
        }

        protected void Button2_Click(object sender, EventArgs e)
        {
            Response.Write("<script>window.open('249VoteResult.aspx','','height=500,width=600');</script>");
        }
View Code

引用控件的页面aspx

<%@ Register Src="~/249VoteControl.ascx" TagName="VoteControl" TagPrefix="uc3" %> 
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <uc3:VoteControl runat="server">//对投票控件的应用
    </uc3:VoteControl>
    </div>
    </form>
</body>

投票结果页面

VoteResult.aspx

<body>
    <form id="form1" runat="server">
    <div>
      <table id="myTable" border="1" cellpadding="5"  cellspacing="0"  runat="server" style="" >
     <h2>查看投票结果</h2>
     
      <tr><td>序号</td>
      <td>投票意见</td>
      <td>票数</td>
      <td>百分比</td>
      </tr>
      <tr><td>1</td>
      <td>非常满意</td>
      <td><%=vote1%></td>
      <td><%=vote1percent%> % </td>
      </tr>
      <tr><td>2</td>
      <td>比较满意</td>
      <td><%=vote2%></td>
      <td><%=vote2percent%> % </td>
      </tr>
      <tr><td>3</td>
      <td>一般</td>
      <td><%=vote3%></td>
      <td><%=vote3percent%> % </td>
      </tr>
      </table>
      <h3>参与投票人数共<%=count%></h3>
    </div>
    </form>
</body>

VoteResult.aspx.cs

  public int vote1;
        public int vote2;
        public int vote3;
        public String vote1percent;
        public String vote2percent;
        public String vote3percent;
        public int count;
        public static int readCount(String fielPath)
        {
            int count = 0;
            StreamReader sr = File.OpenText(fielPath);
            while (sr.Peek() != -1)
            {
                count = int.Parse(sr.ReadLine().ToString());
            }
            sr.Close();
            return count;
        }


        protected void Page_Load(object sender, EventArgs e)
        {
            vote1 = readCount(Server.MapPath("Vote1.txt"));
            vote2 = readCount(Server.MapPath("Vote2.txt"));
            vote3 = readCount(Server.MapPath("Vote3.txt"));
            count=vote1+vote2+vote3;
            vote1percent = (Convert.ToDouble(vote1) * 100 / Convert.ToDouble(count)).ToString("0.00"); //将double型转换为string型。并保留2位小数点
            vote2percent = (Convert.ToDouble(vote2) * 100 / Convert.ToDouble(count)).ToString("0.00"); //将double型转换为string型。并保留2位小数点
            vote3percent = (Convert.ToDouble(vote3) * 100 / Convert.ToDouble(count)).ToString("0.00"); //将double型转换为string型。并保留2位小数点

        }

总结:

【1】对控件的引用<%@ Register Src="~/249VoteControl.ascx" TagName="VoteControl" TagPrefix="uc3" %>

 <uc3:VoteControl runat="server">
    </uc3:VoteControl>

【2】关于文件的读写 

StreamReader sr = File.OpenText(fielPath) ;

  while (sr.Peek() != -1)
      {
          count =int.Parse( sr.ReadLine().ToString());
       }

 StreamWriter sw = new StreamWriter(filePath,false);

sw.WriteLine(count);

【3】疑惑: Page.ClientScript.RegisterStartupScript(this.GetType(), "", "alert('同一个IP只能投票一次');", true);

【4】关于查看投票的结果百分比问题

将double型转换为string型。并保留2位小数点

vote1percent = (Convert.ToDouble(vote1) * 100 / Convert.ToDouble(count)).ToString("0.00");

 【5】最后发点牢骚---困扰程序运行的都是一些小的细节,以前老师总说:现在偷得懒以后总要还的,

现在真的被一些基础的细节问题扰的崩溃。写代码需要沉下心,再沉下心,忌心浮气躁。

原文地址:https://www.cnblogs.com/abc8023/p/3461448.html