zoukankan      html  css  js  c++  java
  • mvc4中使用angularjs实现一个投票系统

    数据库是用EF操作,数据表都很简单中,从代码中也能猜出表的结构,所以关于数据库表就不列出了

    投票系统实现还是比较简单,投票部分使用ajax实现,评论部分是使用angularjs实现,并且页面每隔几秒(可以自己间隔时间)就从服务器异步获取评论数据,并通过angularjs的双向绑定功能自动更新数据(这部分其实完全可以使用websocket - singarlR完成,将更加简洁).评论是按分页显示,所以还使用到了pagedList组件,具体可以看我以前部分。

     

    使用到的 js

        <link href="~/Content/css/bootstrap.min.css" rel="stylesheet" />
        <script src="~/Scripts/jquery-1.8.2.min.js"></script>
        <script src="~/Content/js/bootstrap.min.js"></script>
        <script src="~/Scripts/angularjs.js"></script>

    视图:

    @{
        ViewBag.Title = "Index";
    }
    @using PagedList.Mvc
    @model PagedList.IPagedList<Vote.Models.Comment>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
    
        body {
            /*background: #eff3f5;*/
            background: url(/content/images/abc2.jpg);
            font-size: 16px;
        }
    
        label {
            cursor: pointer;
            height: 40px;
        }
    
        h3 {
            color: #888;
            background: #eff3f5;
            height: 50px;
            line-height: 50px;
            padding-left: 10px;
        }
    
    
        .emitTime {
            clear: both;
            font-size: 14px;
            color: #888;
            margin-top: 20px;
        }
    </style>
    <div class="container" style=" 800px; margin: 0 auto; background: white; padding-left: 0; padding-right: 0; " ng-app="app">
        <div ng-controller="myController">
            <div class="text-center well" style="padding:0;">
                <h3 style="text-align:left;background:#fff;margin:0;">投票</h3>
                <h2 style="padding-top:20px;">@ViewBag.voteTitle</h2>
                <div style="margin: 30px; text-align: left">
                    @foreach (var item in ViewBag.voteItems)
                    {
                        <label for="@item.id">
                            <input type="radio" id="@item.id" name="vote" /> @item.item
                            <small style="color:#888">
                                (                            @item.num 票 )
                            </small>
                        </label><br />
                    }
                </div>
                <button id="btnVote" class="btn btn-primary btn-lg" style="120px;margin-bottom:20px;">确定提交</button>
            </div>
            <div style="margin:0 auto;text-align:center;">
                <h3 class="text-left">发表评论</h3>
                <textarea id="usercomment" style=" 98%; margin: 0 auto; border: 1px solid #0094ff; border-radius: 5px; padding: 3px; box-shadow:rgba(0,0,0,0.2) 5px 5px 5px;" name="answer" placeholder="说两句。。。。"></textarea>
                <button class="btn btn-info btn-lg text-left " style="80px;margin-top:10px;" ng-click="addComment()">发表</button>
            </div>
            <hr />
            <div id="comment">
                <h3>评论</h3>
                @if (Model != null)
                {
                    <div class="pagedList" style="margin:0 auto;text-align:center">
                        @Html.PagedListPager(Model, page => Url.Action("index", new { page }), PagedListRenderOptions.Classic)
                    </div>
                }
    
                <div class="userContents" style="97%;margin:0 auto">
                    <div ng-repeat="item in list">
                        <div class="row">
                            <div class="col-md-1" style="margin:0 auto;"><img src="/content/images/head.png" class="img-circle" /></div>
                            <div class="col-md-11" style="line-height: 30px; padding-left: 20px; padding-right: 20px; ">
                                {{item.contents}}
                            </div>
                        </div>
                        <div class="row">
                            <div class="col-md-1"></div>
                            <div class="col-md-11 emitTime">
                                发表时间:{{item.emit}}
                            </div>
                        </div>
                        <hr />
                    </div>
                </div>
            </div>
        </div>
    </div>
    <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
    <input id="pagenum" value="@ViewBag.pagenum" />
    
    <script>
        var page = '@ViewBag.page' || 1;
    
        $("#btnVote").click(function () {
    
            var id = $(":radio[name=vote]:checked").attr("id");
    
            $.post("/home/vote", { id: id }, function (data) {
                if (data == "ok") {
                    alert("ok");
                    location.href = "/home/index";
                } else {
                    alert(data);
                }
            });
        });
    
        var app = angular.module("app", []);
    
        app.controller("myController", function ($scope, $http, $interval) {
    
    
            $scope.list = [];
    
            $http({
                url: '/home/data',
                metho: 'get',
                params: { 'page': page }
            }).then(function (res) {
                $scope.list = res.data;
            });
    
    
    
            $scope.addComment = function () {
                var txt = $("#usercomment").val();
                $.post("/home/addcomment", { contents: txt }, function (data) {
                    if (data == "ok") {
                        location.href = "/home/index";
                    } else {
                        alert(data);
                    }
                });
            };
            $interval(function () {
                $http({
                    url: '/home/data',
                    metho: 'get',
                    params: { 'page': page }
                }).then(function (res) {
                    $scope.list = res.data;
                });
            }, 5000);
    
        });
    </script>

    Controller:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using Vote.Models;
    using PagedList;
    using System.Net;
    
    namespace Vote.Controllers
    {
        public class HomeController : Controller
        {
            //
            // GET: /Home/
            VoteEntities db = new VoteEntities();
            private const int pagesize = 2;
    
            /// <summary>
            /// angularjs获取数据
            /// </summary>
            /// <param name="page"></param>
            /// <returns></returns>
            public JsonResult Data(int page = 1)
            {
                var list = db.Comments.OrderByDescending(x => x.id).ToPagedList<Comment>(page, pagesize);
                return Json(list, JsonRequestBehavior.AllowGet);
            }
            //用户投票结果添加
            public ActionResult vote(int id=0)
            {
                if ( id < 1)
                {
                    return Content("无效投票");
                }
                if (Request.IsAjaxRequest())
                {
    
                    var userip = GetIP();
                    var isExist = db.IPS.Find(userip);
                    if (isExist != null)
                    {
                        return Content("你已经投过票了,每个电脑只能投票一次");
                    }
                    db.IPS.Add(new IP() { IP1 = userip });
                    var item = db.VoteItems.Find(id);
                    item.num++;
                    db.SaveChanges();
    
                    return Content("ok");
                }
                return Content("无权操作");
            }
            //视图
            public ActionResult Index(int page = 1)
            {
                var list = db.Comments.OrderByDescending(x => x.id).ToPagedList<Comment>(page, pagesize);
                ViewBag.page = page;
    
                ViewBag.voteTitle = db.VoteTitles.FirstOrDefault().title;
                ViewBag.voteItems = db.VoteItems.ToList();
    
                return View(list);
            }
    
            //用户添加评论
            public ActionResult addcomment(Comment c)
            {
                if (Request.IsAjaxRequest())
                {
                    try
                    {
                        var now = DateTime.Now;
    
                        c.addtime = now;
                        c.emit = now.ToString("yyyy-MM-dd HH:mm:ss");
                        c.userip = GetIP();
                        db.Comments.Add(c);
                        db.SaveChanges();
                        return Content("ok");
                    }
                    catch (Exception ex)
                    {
                        return Content(ex.Message);
                    }
                }
                return Content("无权操作");
            }
            //取得用户客户机的IP
            public static string GetIP()
            {
                string IP4Address = String.Empty;
    
    
                foreach (IPAddress IPA in Dns.GetHostAddresses(System.Web.HttpContext.Current.Request.UserHostAddress))
                {
                    if (IPA.AddressFamily.ToString() == "Internetwork")
                    {
                        IP4Address = IPA.ToString();
                        break;
                    }
                }
    
                if (IP4Address != String.Empty)
                {
                    return IP4Address;
                }
    
                foreach (IPAddress IPA in Dns.GetHostAddresses(Dns.GetHostName()))
                {
                    if (IPA.AddressFamily.ToString() == "InterNetwork")
                    {
                        IP4Address = IPA.ToString();
                        break;
                    }
                }
    
                return IP4Address;
            }
        }
    }
  • 相关阅读:
    递归方程(续)
    递推方程
    协方差简单介绍
    排列组合
    牛顿法
    jquery常用方法总结
    RegExp的test()方法
    localStorage用法总结
    正则表达式
    登录页面按回车键实现登陆效果
  • 原文地址:https://www.cnblogs.com/lunawzh/p/6820166.html
Copyright © 2011-2022 走看看