《ASP.NET1200例》实现投票的用户控件
用户控件ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="249VoteControl.ascx.cs" Inherits="FirstWeb._249VoteControl1" %>
您对公司餐饮服务是否满意?
<asp:RadioButtonList ID="RadioButtonList1" runat="server">
<asp:ListItem Value="">非常满意</asp:ListItem>
<asp:ListItem Value="">比较满意</asp:ListItem>
<asp:ListItem Value="">一般</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 = ;
StreamReader sr = File.OpenText(fielPath) ;
while (sr.Peek() != -)
{
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 + ;
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 : addCount(Server.MapPath("Vote1.txt")); break;
case : addCount(Server.MapPath("Vote2.txt")); break;
case : 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();//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 : addCount(Server.MapPath("Vote1.txt")); break;
case : addCount(Server.MapPath("Vote2.txt")); break;
case : 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();//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>");
}
引用控件的页面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="" cellpadding="" cellspacing="" runat="server" style="" >
<h2>查看投票结果</h2> <tr><td>序号</td>
<td>投票意见</td>
<td>票数</td>
<td>百分比</td>
</tr>
<tr><td></td>
<td>非常满意</td>
<td><%=vote1%></td>
<td><%=vote1percent%> % </td>
</tr>
<tr><td></td>
<td>比较满意</td>
<td><%=vote2%></td>
<td><%=vote2percent%> % </td>
</tr>
<tr><td></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 = ;
StreamReader sr = File.OpenText(fielPath);
while (sr.Peek() != -)
{
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) * / Convert.ToDouble(count)).ToString("0.00"); //将double型转换为string型。并保留2位小数点
vote2percent = (Convert.ToDouble(vote2) * / Convert.ToDouble(count)).ToString("0.00"); //将double型转换为string型。并保留2位小数点
vote3percent = (Convert.ToDouble(vote3) * / 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】最后发点牢骚---困扰程序运行的都是一些小的细节,以前老师总说:现在偷得懒以后总要还的,
现在真的被一些基础的细节问题扰的崩溃。写代码需要沉下心,再沉下心,忌心浮气躁。
《ASP.NET1200例》实现投票的用户控件的更多相关文章
- 《ASP.NET1200例》嵌套在DataLisT控件中的其他服务器控件---DropDownList控件的数据绑定
aspx <script type="text/javascript"> function CheckAll(Obj) { var AllObj = document. ...
- asp.net动态加载ascx用户控件
原文:asp.net动态加载ascx用户控件 在主aspx/ascx文件中,将目标ascx1,ascx2控件拖拉到其页面中,然后删除,目的是要生成:Register 代码,然后在主文件中定义DIV或T ...
- ASP.NET同页面内【用户控件与父页面】以及【用户控件与用户控件】之间方法调用
在用户控件中,获取父页面的方法 1:方法没有参数(userInfor()) string userInfor = Convert.ToString(this.Page.GetType().GetMet ...
- asp.net 动态添加多个用户控件
动态添加多个相同用户控件,并使每个用户控件获取不同的内容. 用户控件代码: 代码WebControls using System; using System.Collections.Generic; ...
- (九)ASP.NET自定义用户控件(2)
http://www.cnblogs.com/SkySoot/archive/2012/09/04/2670678.html 用户控件 在 .NET 里,可以通过两种方式把自己的控件插入到 Web 窗 ...
- ASP.NET MVC中加载WebForms用户控件(.ascx)
原文:ASP.NET MVC中加载WebForms用户控件(.ascx) 问题背景 博客园博客中的日历用的是ASP.NET WebForms的日历控件(System.Web.UI.WebControl ...
- Asp.net 恢复页面内用户控件内的控件ClientID
众所周知在Asp.net中如果一个页面添加了一个用户控件(或母版页),那么用户控件内的控件的 ClientID号会被自动添加页面中用户控件的ClientID 即页面中的控件内的控件ClientID ...
- 035. asp.netWeb用户控件之四通过用户控件实现投票和结果分析
用户控件Vote.ascx代码 <%@ Control Language="C#" AutoEventWireup="true" CodeFile=&qu ...
- 039. asp.netWeb用户控件之七实现具有虚拟键盘的功能的用户控件
用户控件ascx代码: <%@ Control Language="C#" AutoEventWireup="true" CodeFile="K ...
随机推荐
- Git的基本使用方法和安装&心得体会
1. git的安装和github的注册.代码托管.创建organization.邀请member. (1)git的安装 因为我电脑是windows系统,所以下载的是git for windows.在官 ...
- MyEclipse 8.5配置Tomcat 7.0
MyEclipse 8.5配置Tomcat 7.0 在窗口(Windows)->首选项(Prefrences)->MyEclipse->Servers->Tomcat 6.x下 ...
- c# 多线程 调用带参数函数
线程操作主要用到Thread类,他是定义在System.Threading.dll下.使用时需要添加这一个引用.该类提供给我们四个重载的构造函数(以下引自msdn). Thread (Pa ...
- JQuery思维导图
- poj1703 并查集
输入是2个不在一起的人,可以用一个数组来保存和他矛盾的人.这样find的时候就find(hash[]);就可以: #include<stdio.h> #include<string. ...
- 在Eclipse 中下载 开源中国码云上的项目
功能:使用开源中国代码托管(码云)来托管代码,本地的使用Eclipse,该如何配置? 步骤: 1/ 在码云 上建一个工程,(为了访问托管工程的权限) 2/ 在eclipse中打开名字叫做“Git ...
- shell 命令遇到的一些问题
1. command not found 一般都是未安装,需要root 权限去安装服务,就可正常使用.比如rz, sz, crontab, sendemail, lftp等 2. rz 传输失败,输 ...
- ZOJ 2110 Tempter of the Bone
Tempter of the Bone Time Limit: 2 Seconds Memory Limit: 65536 KB The doggie found a bone in an ...
- Android消息通知(notification)和PendingIntent传值
通知栏的自定义布局:转:http://blog.csdn.net/vipzjyno1/article/details/25248021 拓展 实现自定义的通知栏效果: 这里要用到RemoteViews ...
- CSS------添加注释框
my.html <div><a href="#" class="tip">你好<span><k>哈哈哈哈< ...