《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 ...
随机推荐
- Struts-1和2的比较
Struts1和Struts2都是MVC设计模式的经典应用框架,下文从代码,性能,测试,功能等方面对Struts1和Struts2进行简单比较,来看看Struts的高级版本在哪些方面进行了优化. (1 ...
- sort关于去除重复/查找非重复/查找重复/统计
去除重复sort file |uniq 查找非重复 sort file | uniq -u 查找重复 sort file | uniq -d 统计 sort file | uniq -c
- 【CodeForces 622A】Infinite Sequence
题意 一个序列是, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 4, 5....这样排的,求第n个是什么数字. 分析 第n个位置属于1到k,求出k,然后n-i*(i-1)/ ...
- bzoj 1493 暴力
我们可以枚举每个点,然后求出这个点到其余点最小消耗的代价,求出比t小的且距离最大的更新答案. /**************************************************** ...
- 理解SIFT
理解SIFT.tab{font-size:12px; margin-bottom: 10px;}.tab a{cursor:pointer;cursor:pointer;display:inline- ...
- BZOJ-1305 dance跳舞 建图+最大流+二分判定
跟随YveH的脚步又做了道网络流...%%% 1305: [CQOI2009]dance跳舞 Time Limit: 5 Sec Memory Limit: 162 MB Submit: 2119 S ...
- 【bzoj4010】 HNOI2015—菜肴制作
http://www.lydsy.com/JudgeOnline/problem.php?id=4010 (题目链接) 题意 给出一张无向图要求出一个拓扑序列满足1的位置最靠前 ,在保证上面的条件下使 ...
- java反射学习
通过一个对象获得完整的包名和类名 package reflect; public class GetClass { public static void main(String[] args) { G ...
- another app is currently holding the yum lock;waiting for it to exit解决
有时用yum升级一些文件时,会出现以下情况: another app is currently holding the yum lock;waiting for it to exit... 可 ...
- JavaScript入门培训材料(Copy至此以作备份)
JavaScript简明学习教程 2014年5月31日 目录 一.说明... 2 二.准备知识... 2 (一)HTML. 2 (二)DOM.. 3 三.JavaScript简介... 3 四.Jav ...