用c#开发微信 (17) 微活动 3 投票活动 (文本投票)
前面介绍了微活动《大转盘》 和 《刮刮卡》,这次介绍下微投票,微投票分二种,一种是文本投票, 一种是图片投票。
下面介绍文本投票的详细步骤:
1. 新建文本投票活动
- 代码实现:
<div class="tab-content" >
<dl>
<dt>投票标题:</dt>
<dd>
<asp:TextBox runat="server" ID="title" CssClass="input normal" datatype="*1-100" sucmsg=" " nullmsg=" "></asp:TextBox>
<span class="Validform_checktip">*</span>
</dd>
</dl>
<dl>
<dt >投票图片:</dt>
<dd>
<asp:TextBox runat="server" CssClass="input normal upload-path" ID="votepic"></asp:TextBox>
<div class="upload-box upload-img"></div>
</dd>
</dl>
<dl>
<dt>
图片显示:
</dt>
<dd>
<div class="rule-multi-radio">
<asp:RadioButtonList ID="picdisplay" runat="server" RepeatDirection="Horizontal" RepeatLayout="Flow">
<asp:ListItem Value="True" Selected="True">显示在投票页面</asp:ListItem>
<asp:ListItem Value="False" >不显示在投票页面</asp:ListItem>
</asp:RadioButtonList>
</div>
</dd>
</dl>
<dl>
<dt>投票说明:</dt>
<dd>
<textarea name="txtactContent" rows="2" cols="20" id="txtactContent" class="input" runat="server"></textarea>
<span class="Validform_checktip"></span>
</dd>
</dl>
<dl>
<dt>单选/多选:</dt>
<dd>
<div class="rule-multi-radio">
<asp:RadioButtonList ID="Radio" runat="server" RepeatDirection="Horizontal" RepeatLayout="Flow">
<asp:ListItem Value="True" Selected="True">单选</asp:ListItem>
<asp:ListItem Value="False" >多选</asp:ListItem>
</asp:RadioButtonList>
</div>
</dd>
</dl>
<dl>
<dt>截止时间:</dt>
<dd>
<div class="input-date">
<asp:TextBox runat="server" ID="begindate" CssClass="input date" onfocus="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss'})" datatype="*1-50" errormsg="请选择正确的日期" sucmsg=" " nullmsg=" "></asp:TextBox>
</div>
到
<div class="input-date">
<asp:TextBox runat="server" ID="enddate" CssClass="input date" onfocus="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss'})" datatype="*1-50" errormsg="请选择正确的日期" sucmsg=" " nullmsg=" "></asp:TextBox>
</div>
<span class="Validform_checktip">*</span>
</dd>
</dl>
<dl>
<dt>投票结果:</dt>
<dd>
<div class="rule-multi-radio">
<asp:RadioButtonList ID="resultShowtype" runat="server" RepeatDirection="Horizontal" RepeatLayout="Flow">
<asp:ListItem Value="1" Selected="True" >投票前可见</asp:ListItem>
<asp:ListItem Value="2" >投票后可见</asp:ListItem>
<asp:ListItem Value="3" >投票结束可见</asp:ListItem>
</asp:RadioButtonList>
</div>
</dd>
</dl>
<dl style="display:none">
<dt>投票后参加活动:</dt>
<dd>
<asp:TextBox runat="server" CssClass="input normal upload-path" ID="actUrl"></asp:TextBox>
</dd>
</dl>
</div>
2. 设置投票的选项
- 代码实现:
<div class="tab-content" style="display: none">
<dl>
<dt>选项标题</dt>
<dd>选项标题:<asp:TextBox ID="xuanxtitle1" runat="server" CssClass="input " datatype="*1-100" sucmsg=" " Text="" />
排序:<asp:TextBox ID="Sortid1" runat="server" CssClass="input small" datatype="n" sucmsg=" " Text="" nullmsg=" " />
<span class="Validform_checktip">*必填项</span>
</dd>
</dl>
<dl>
<dt>选项标题</dt>
<dd>选项标题:<asp:TextBox ID="xuanxtitle2" runat="server" CssClass="input " datatype="*1-20" sucmsg=" " Text="" />
排序:<asp:TextBox ID="Sortid2" runat="server" CssClass="input small " datatype="n" sucmsg=" " Text="" nullmsg=" " />
<span class="Validform_checktip">*必填项</span>
</dd>
</dl>
<dl>
<dt>选项标题</dt>
<dd>选项标题:<asp:TextBox ID="xuanxtitle3" runat="server" CssClass="input " datatype="*0-100" sucmsg=" " Text="" />
排序:<asp:TextBox ID="Sortid3" runat="server" CssClass="input small" datatype="/^\d*$/" sucmsg=" " Text="" />
</dd>
</dl>
<dl>
<dt>选项标题</dt>
<dd>选项标题:<asp:TextBox ID="xuanxtitle4" runat="server" CssClass="input " datatype="*0-100" sucmsg=" " Text="" />
排序:<asp:TextBox ID="Sortid4" runat="server" CssClass="input small" datatype="/^\d*$/" sucmsg=" " Text="" />
</dd>
</dl>
<dl>
<dt>选项标题</dt>
<dd>选项标题:<asp:TextBox ID="xuanxtitle5" runat="server" CssClass="input " datatype="*0-100" sucmsg=" " Text="" />
排序:<asp:TextBox ID="Sortid5" runat="server" CssClass="input small" datatype="/^\d*$/" sucmsg=" " Text="" />
</dd>
</dl>
<dl>
<dt>选项标题</dt>
<dd>选项标题:<asp:TextBox ID="xuanxtitle6" runat="server" CssClass="input " datatype="*0-100" sucmsg=" " Text="" />
排序:<asp:TextBox ID="Sortid6" runat="server" CssClass="input small" datatype="/^\d*$/" sucmsg=" " Text="" />
</dd>
</dl>
</div>
3. 设置完成后出现在列表里
4. 把上面生成的外链代码发送给微信用户
用户收到投票的消息,点击进入后就可以投票了
代码实现:
- 前台显示
<div class="vote">
<form class="form" target="_top" runat="server" enctype="multipart/form-data">
<div class="votecontent">
<h2><%=baseinfo.title %></h2>
<span class="date"><%=baseinfo.creatDate.Value.ToString("yyyy-MM-dd") %></span>
<p class="content" id="content"><%=baseinfo.votecontent %></p>
<script src="js/play.js" type="text/javascript"></script>
<p class="modus">单选投票,<span class="number">共有<%=toupNum %>参与投票</span></p>
<ul class="list" id="list">
<asp:Literal ID="litChooes" runat="server"></asp:Literal>
<asp:Literal ID="litMessageList" runat="server" EnableViewState="false"></asp:Literal>
</ul>
<asp:Literal ID="litSubmitBtn" runat="server" EnableViewState="false"></asp:Literal>
<input class="pxbtn" name="button" runat="server" type="button" id="btnSubmit" value="确认提交">
</div>
</form>
</div>
- 后台绑定数据:
public void BindData(int wid, int aid, string openid)
{
//基本表信息
BLL.wx_vote_base baseBll = new BLL.wx_vote_base();
List<Model.wx_vote_base> mlist = baseBll.GetModelList(string.Format(" id={0} and wid={1} ", aid, wid));
if (mlist.Count <= 0 || mlist == null)
{
return;
}
baseinfo = mlist[0];
//投票选项字符串设置
BLL.wx_vote_item itemBll = new BLL.wx_vote_item();
IList<Model.wx_vote_item> itemlist = itemBll.GetModelList("baseid=" + baseinfo.id);
if (itemlist == null || itemlist.Count <= 0)
{
return;
}
ItemListStr(itemlist, openid);
}
public void ItemListStr(IList<Model.wx_vote_item> itemlist, string openid)
{
toupNum = itemlist.Sum(i => i.tpTimes == null ? 0 : i.tpTimes).Value;
BLL.wx_vote_result retBll = new BLL.wx_vote_result();
IList<Model.wx_vote_result> retList = retBll.GetModelList("baseid=" + baseinfo.id);
//投票总数
// int ttCount = retList == null ? 0 : retList.Count;
//toupNum = retBll.GetVotedPersonNum(baseinfo.id);
int itemCount = 0;
float bfb = 0;
hasVoted = false;
bool showReult = false;
//判断这个人是否已经投票了
IList<Model.wx_vote_result> myretList = (from r in retList where r.openId == openid select r).ToArray<Model.wx_vote_result>();
if (myretList != null && myretList.Count > 0)
{
hasVoted = true;
}
//判断是否显示结果
if (baseinfo.resultShowtype == 1)
{
showReult = true;
}
else if (baseinfo.resultShowtype == 2 && hasVoted)
{
showReult = true;
}
else if (baseinfo.resultShowtype == 3 && baseinfo.endTime <= DateTime.Now)
{
showReult = true;
}
StringBuilder sb = new StringBuilder();
StringBuilder choose = new StringBuilder();
Model.wx_vote_item item = new Model.wx_vote_item();
for (int i = 0; i < itemlist.Count; i++)
{
item = itemlist[i];
itemCount = item.tpTimes == null ? 0 : item.tpTimes.Value;
bfb = computeBL(toupNum, itemCount);
sb.Append("<li>");
if (showReult)//投票了
{
sb.Append(" <label for=\"square-checkbox-" + i + "\">");
if (!showReult || (baseinfo.resultShowtype == 1 && !hasVoted))
{
sb.Append("<input class=\"ckbx\" tabindex=\"9\" name=\"id[]\" value=\"" + (i + 1) + "\" type=\"radio\" id=\"square-checkbox-" + i + "\">");
}
sb.Append(" <span>" + item.title + "</span>");
sb.Append(" </label>");
sb.Append(" <div id=\"voteshow" + i + "\" class=\"votebar\">");
sb.Append(" <div class=\"pbg\">");
sb.Append(" <div style=\"width: " + bfb + "%; background-color:" + bkColor(i) + "\" class=\"pbr\"></div>");
sb.Append(" </div>");
sb.Append(" <span class=\"percentage\" style=\"color: " + bkColor(i) + "\">" + bfb + "%<span class=\"user\">(" + itemCount + ")</span></span>");
sb.Append(" </div>");
}
else
{
sb.Append(" <label for=\"square-checkbox-" + i + "\">");
if (!showReult || (baseinfo.resultShowtype == 1 && !hasVoted))
{
sb.Append(" <input class=\"ckbx\" tabindex=\"9\" name=\"id[]\" value=\"" + (i + 1) + "\" type=\"" + chektype() + "\" id=\"square-checkbox-" + i + "\">");
}
sb.Append(" <span>" + item.title + "</span>");
sb.Append(" </label>");
}
sb.Append(" </li>");
}
if (hasVoted)
this.btnSubmit.Visible = false;
if (baseinfo.resultShowtype == 3 && baseinfo.endTime > DateTime.Now && hasVoted)
{
Response.Redirect("tp_result.aspx");
}
litMessageList.Text = sb.ToString();
}
投票成功后提示
- 投票成功
<script>
$(document).ready(function () {
$(".ckbx").click(function () {
var i = 0;
var aa = document.getElementsByName('id[]');
var mnum = aa.length;
j = 0;
for (i = 0; i < mnum; i++) {
if (aa[i].checked) {
j++;
}
}
if (j > 2) {
$(this).attr("checked", false);
}
});
});
$(document).ready(function () {
var isradio = $('input:radio[class="ckbx"]:checked').val();
$("#btnSubmit").click(function () {
var wid = $.query.get("wid");
var openid = $.query.get("openid");
var aid = $.query.get("aid");
var selectItemid = "";
if (isradio == "true") {
var list = $('input:radio[class="ckbx"]:checked').val();
if (list == null) {
alert("请选中一个!");
return false;
}
else {
selectItemid = list;
}
}
else {
$('input[class="ckbx"]:checked').each(function () {
selectItemid += $(this).val() + ',';
});
if (selectItemid == "") {
alert("请选中一个!");
return;
}
if (selectItemid.length > 0) {
selectItemid = selectItemid.substring(0, selectItemid.length - 1);
}
}
var submitData = {
wid: wid,
openid: openid,
baseid: aid,
itemid: selectItemid,
isradio: isradio,
myact: "commit"
};
$.post('vote.ashx', submitData,
function (data) {
if (data.ret == "ok") {
alert(data.content);
window.location.href = location.href;
} else { alert(data.content); }
},
"json")
});
});
</script>
- 插入DB:
public class vote : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/json";
string _action = MyCommFun.QueryString("myact");
string openid = MyCommFun.RequestOpenid(); //得到微信用户的openid
Dictionary<string, string> jsonDict = new Dictionary<string, string>();
if (_action == "commit")
{ //提交投票
int wid = MyCommFun.RequestInt("wid");
int baseid = MyCommFun.RequestInt("baseid");
string itemid = HttpContext.Current.Request["itemid"].ToString();
BLL.wx_vote_result resultBll = new BLL.wx_vote_result();
Model.wx_vote_result result = new Model.wx_vote_result();
BLL.wx_vote_item iBll = new BLL.wx_vote_item();
if (MyCommFun.QueryString("isradio") == "true")
{
result.baseid = baseid;
result.itemid = Convert.ToInt32(itemid);
result.openId = openid;
result.createDate = DateTime.Now;
resultBll.Add(result);
iBll.Update(result.itemid.Value, result.baseid.Value);
}
else
{
string[] sArray = itemid.Split(',');
for (int i = 0; i < sArray.Length; i++)
{
result.baseid = baseid;
result.itemid = Convert.ToInt32(sArray[i]);
result.openId = openid;
result.createDate = DateTime.Now;
resultBll.Add(result);
iBll.Update(result.itemid.Value, result.baseid.Value);
}
}
//AddAdminLog(MXEnums.ActionEnum.Add.ToString(), ""); //记录日志
jsonDict.Add("ret", "ok");
jsonDict.Add("content", "投票成功");
context.Response.Write(MyCommFun.getJsonStr(jsonDict));
}
}
public bool IsReusable
{
get
{
return false;
}
}
}
因为前面设置的是投票完成后才可以看到投票结果,所以这里投完票后会显示投票的结果
- 计算投票数比例
protected float computeBL(int ttCount, int itemCount)
{
if (ttCount == 0)
{
return (float)0.00;
}
float ret = (itemCount * 100.0f) / ttCount;
ret = (float)Math.Round(ret, 2);
return ret;
}
用c#开发微信 (17) 微活动 3 投票活动 (文本投票)的更多相关文章
- 用c#开发微信 (7) 微渠道 - 推广渠道管理系统 2 业务逻辑实现
我们可以使用微信的“生成带参数二维码接口”和 “用户管理接口”,来实现生成能标识不同推广渠道的二维码,记录分配给不同推广渠道二维码被扫描的信息.这样就可以统计和分析不同推广渠道的推广效果. 上次介绍了 ...
- 用c#开发微信 (8) 微渠道 - 推广渠道管理系统 3 UI设计及后台处理
我们可以使用微信的“生成带参数二维码接口”和 “用户管理接口”,来实现生成能标识不同推广渠道的二维码,记录分配给不同推广渠道二维码被扫描的信息.这样就可以统计和分析不同推广渠道的推广效果. 前面二篇& ...
- 用c#开发微信 (11) 微统计 - 阅读分享统计系统 1 基础架构搭建
微信平台自带的统计功能太简单,有时我们需要统计有哪些微信个人用户阅读.分享了微信公众号的手机网页,以及微信个人用户访问手机网页的来源:朋友圈分享访问.好友分享消息访问等.本系统实现了手机网页阅读.分享 ...
- 用c#开发微信 (15) 微活动 1 大转盘
微信营销是一种新型的营销模式,由于微信更重视用户之间的互动,故而这种营销推广不不能盲目地套用微博营销的单纯大量广告推送方式.这种方式在微信营销中的效果非常差,会令用户反感,继而取消去企业或商家的微信公 ...
- 用c#开发微信 (16) 微活动 2 刮刮卡
微信营销是一种新型的营销模式,由于微信更重视用户之间的互动,故而这种营销推广不不能盲目地套用微博营销的单纯大量广告推送方式.这种方式在微信营销中的效果非常差,会令用户反感,继而取消去企业或商家的微信公 ...
- 用c#开发微信 (6) 微渠道 - 推广渠道管理系统 1 基础架构搭建
我们可以使用微信的“生成带参数二维码接口”和 “用户管理接口”,来实现生成能标识不同推广渠道的二维码,记录分配给不同推广渠道二维码被扫描的信息.这样就可以统计和分析不同推广渠道的推广效果. 本系统使用 ...
- 用c#开发微信 (9) 微渠道 - 推广渠道管理系统 4 部署测试 (最终效果图)
我们可以使用微信的“生成带参数二维码接口”和 “用户管理接口”,来实现生成能标识不同推广渠道的二维码,记录分配给不同推广渠道二维码被扫描的信息.这样就可以统计和分析不同推广渠道的推广效果. 本文是微渠 ...
- 用c#开发微信 (12) 微统计 - 阅读分享统计系统 2 业务逻辑实现
微信平台自带的统计功能太简单,有时我们需要统计有哪些微信个人用户阅读.分享了微信公众号的手机网页,以及微信个人用户访问手机网页的来源:朋友圈分享访问.好友分享消息访问等.本系统实现了手机网页阅读.分享 ...
- 用c#开发微信 (13) 微统计 - 阅读分享统计系统 3 UI设计及后台处理
微信平台自带的统计功能太简单,有时我们需要统计有哪些微信个人用户阅读.分享了微信公众号的手机网页,以及微信个人用户访问手机网页的来源:朋友圈分享访问.好友分享消息访问等.本系统实现了手机网页阅读. ...
随机推荐
- SQL Server常用技巧
1:在SQL语句中,将存储过程结果集(表)存入到临时表中 insert into #tmp EXEC P_GET_AllChildrenComany '80047' 说明:#tmp要提前创建好 2:字 ...
- avalon2学习教程13组件使用
avalon2最引以为豪的东西是,终于有一套强大的类Web Component的组件系统.这个组件系统媲美于React的JSX,并且能更好地控制子组件的传参. avalon自诞生以来,就一直探索如何优 ...
- .net中自定义过滤器对Response内容进行处理
原文:http://www.cnblogs.com/zgqys1980/archive/2008/09/02/1281895.html 代码DEMO:http://files.cnblogs.com/ ...
- c语言知识点
1.在c语言中,函数,声明,调用的类型务必是一致的, 2.主机id:指ip地址最后一个字节,例如,203.86.61.106,---->106指主机id, 3,端口号:6789,换成16进制1A ...
- flash项目优化总结
swc中的类如果没有在项目中没有被申明,在编译时就不会被编译进swf中,这样一些swc中的类和资源类如果不用了,只要不被声明就不会占用swf大小了.
- Python:装饰器
格式:在执行的参数前加上@functon 例1:传一个参数 #模拟验证功能 def login(auth): def fun(arg): #为了避免程序一执行的时候就执行验证,需要再加一层函数. pr ...
- redis 内存泄露
http://www.oschina.net/question/2266476_246221 http://stackoverflow.com/questions/24304212/how-to-de ...
- 0731am视图 模型
跨控制器调用方法 function DiaoYong(){ 造对象$sc = new \Home\Controller\GoodsController();echo $sc->aa(); 如果在 ...
- [Shell]Bash变量:变量测试与内容替换
--------------------------------------------------------------------------------------------- 变量测试是通 ...
- Github心得体会
Github是一个代码托管的网站,以前端的代码为主,还有很多互动. 在我的理解看来,github并不仅仅是一个代码库,你可以自由注册,推送自己一些感兴趣编写的源代码.它不是单纯的保存代码,更多的是让 ...