前面介绍了微活动《大转盘》 和 《刮刮卡》,这次介绍下微投票,微投票分二种,一种是文本投票, 一种是图片投票。

 

下面介绍文本投票的详细步骤:

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#开发微信 系列汇总

用c#开发微信 (17) 微活动 3 投票活动 (文本投票)的更多相关文章

  1. 用c#开发微信 (7) 微渠道 - 推广渠道管理系统 2 业务逻辑实现

    我们可以使用微信的“生成带参数二维码接口”和 “用户管理接口”,来实现生成能标识不同推广渠道的二维码,记录分配给不同推广渠道二维码被扫描的信息.这样就可以统计和分析不同推广渠道的推广效果. 上次介绍了 ...

  2. 用c#开发微信 (8) 微渠道 - 推广渠道管理系统 3 UI设计及后台处理

    我们可以使用微信的“生成带参数二维码接口”和 “用户管理接口”,来实现生成能标识不同推广渠道的二维码,记录分配给不同推广渠道二维码被扫描的信息.这样就可以统计和分析不同推广渠道的推广效果. 前面二篇& ...

  3. 用c#开发微信 (11) 微统计 - 阅读分享统计系统 1 基础架构搭建

    微信平台自带的统计功能太简单,有时我们需要统计有哪些微信个人用户阅读.分享了微信公众号的手机网页,以及微信个人用户访问手机网页的来源:朋友圈分享访问.好友分享消息访问等.本系统实现了手机网页阅读.分享 ...

  4. 用c#开发微信 (15) 微活动 1 大转盘

    微信营销是一种新型的营销模式,由于微信更重视用户之间的互动,故而这种营销推广不不能盲目地套用微博营销的单纯大量广告推送方式.这种方式在微信营销中的效果非常差,会令用户反感,继而取消去企业或商家的微信公 ...

  5. 用c#开发微信 (16) 微活动 2 刮刮卡

    微信营销是一种新型的营销模式,由于微信更重视用户之间的互动,故而这种营销推广不不能盲目地套用微博营销的单纯大量广告推送方式.这种方式在微信营销中的效果非常差,会令用户反感,继而取消去企业或商家的微信公 ...

  6. 用c#开发微信 (6) 微渠道 - 推广渠道管理系统 1 基础架构搭建

    我们可以使用微信的“生成带参数二维码接口”和 “用户管理接口”,来实现生成能标识不同推广渠道的二维码,记录分配给不同推广渠道二维码被扫描的信息.这样就可以统计和分析不同推广渠道的推广效果. 本系统使用 ...

  7. 用c#开发微信 (9) 微渠道 - 推广渠道管理系统 4 部署测试 (最终效果图)

    我们可以使用微信的“生成带参数二维码接口”和 “用户管理接口”,来实现生成能标识不同推广渠道的二维码,记录分配给不同推广渠道二维码被扫描的信息.这样就可以统计和分析不同推广渠道的推广效果. 本文是微渠 ...

  8. 用c#开发微信 (12) 微统计 - 阅读分享统计系统 2 业务逻辑实现

    微信平台自带的统计功能太简单,有时我们需要统计有哪些微信个人用户阅读.分享了微信公众号的手机网页,以及微信个人用户访问手机网页的来源:朋友圈分享访问.好友分享消息访问等.本系统实现了手机网页阅读.分享 ...

  9. 用c#开发微信 (13) 微统计 - 阅读分享统计系统 3 UI设计及后台处理

      微信平台自带的统计功能太简单,有时我们需要统计有哪些微信个人用户阅读.分享了微信公众号的手机网页,以及微信个人用户访问手机网页的来源:朋友圈分享访问.好友分享消息访问等.本系统实现了手机网页阅读. ...

随机推荐

  1. 43. studio上的json串解析

    var doc = O_PARAMETER.FJSonStr;(doc为:{"items":[],"nextId":0}) //1.先转为json对象,主要有以 ...

  2. RichEdit

    RichEdit 设置字符颜色 ; ; this->RichEdit1->SelAttributes->Color=clRed; 行间距字符间距 void __fastcall TF ...

  3. linux部分命令

    打包ROOT文件夹tar -cvf ROOT3.tar ./ROOT 解压则相反 ps aux | grep tomcat 直接杀死tomcat sudo kill -9 进程号 rm -rf ./R ...

  4. mysql错误用法insert into where

    mysql中给表中插入数据,一般使用insert into. 但是在插入数据时,有时会根据条件来插入数据,比如insert into t_person(num,name) values(1,'lily ...

  5. nc检测端口是否正常服务的一个命令

    最近碰到一个项目,前端用apache htttpd进行发布(80端口),通过双机负载均衡转发到后端的两个tomcat进行处理(8081和8082端口),现在需要随时监控这三个端口的情况,一旦down掉 ...

  6. Principal Component Analysis(PCA) algorithm summary

    Principal Component Analysis(PCA) algorithm summary mean normalization(ensure every feature has sero ...

  7. Rule of Modularity

    As Brian Kernighan once observed, “Controlling complexity is the essence of computer programming.” . ...

  8. union all 里面的order by

    例1: SELECT 1 order2 FROM dual union all SELECT 3 order2 FROM dual union all SELECT 2 order1 FROM dua ...

  9. android通过gradle打包

    这里是最简单的打包方法,实际上gradle的语法是groovy,可以通过编写脚本实现更智能的构建,这个我还不懂==,等我学习了解后,单独整理一个gradle的随笔,这里先应付打包吧   环境要求 安装 ...

  10. handler 异步执行(进度条加载到100)

    生明一个handler 对象(可重写handlerMessage 方法) 声明一个Runnable 对象,需重写run方法 按钮事件:handler对象实例的post方法调用线程. 线程的run方法开 ...