• 《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】最后发点牢骚---困扰程序运行的都是一些小的细节,以前老师总说:现在偷得懒以后总要还的,

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

  • 相关阅读:
    Spring常见面试题
    Mybatis常见面试题
    SQLSERVER查询整个数据库中某个特定值所在的表和字段的方法
    四款常见数据库比较同步软件汇总
    SQL Server常用函数整理
    比较经典的SQL面试题
    sqlserver查询数据库中有多少个表
    数据库设计三大范式
    MS SQL SERVER导出表结构到Excel
    flask-vue 解决跨域问题
  • 原文地址:https://www.cnblogs.com/abc8023/p/3461448.html
Copyright © 2020-2023  润新知