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="width: 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="width:120px;margin-bottom:20px;">确定提交</button>
        </div>
        <div style="margin:0 auto;text-align:center;">
            <h3 class="text-left">发表评论</h3>
            <textarea id="usercomment" style="width: 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="width: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="width: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;
        }
    }
}
时间: 2024-11-04 10:08:43

mvc4中使用angularjs实现一个投票系统的相关文章

struts2和DBUtils结合做的一个投票系统练习

需求分析: 题目:投票 二 功能要求 具体要求如下: 项目首页显示所有投票结果,按照创建时间降序排列 点击主题进入到查看页面,每次点击后,查看次数都增加1.查看页面效果图如下.百分比计算是根据总票数和该主题人数计算出的 当点击"我要投票"时,先判断用户是否选择了一项,如果没有选择给出下面提示 如果用户正确操作,对该选项的投票次数加1,并让主题表subjects中相关主题的投票人数加1.完成把最总结过显示到相关页面中 给定如下数据表结构 -------投票系统入口------------

AngularJs打造一个简易权限系统

AngularJs打造一个简易权限系统 一.引言 上一篇博文已经向大家介绍了AngularJS核心的一些知识点,在这篇博文将介绍如何把AngularJs应用到实际项目中.本篇博文将使用AngularJS来打造一个简易的权限管理系统.下面不多说,直接进入主题. 二.整体架构设计介绍 首先看下整个项目的架构设计图: 从上图可以看出整个项目的一个整体结构,接下来,我来详细介绍了项目的整体架构: 采用Asp.net Web API来实现REST 服务.这样的实现方式,已达到后端服务的公用.分别部署和更好

c语言中如何设计和编写一个应用系统?

C程序中,如何设计和编写一个应用系统? 一. C语言文件的操作 1. 文件操作的基本方法: C语言将计算机的输入输出设备都看作是文件.例如,键盘文件.屏幕文件等. 向屏幕输出一个信息,例如"Hello"是 #include.h> int main() { printf("Hello\\n"); } 从键盘接收一个字符串然后显示是 #include.h> int main() { char a[10]; scanf("%s",&

[转]MVC4项目中验证用户登录一个特性就搞定

本文转自:http://www.mrhuo.com/Article/Details/470/A-Attribute-For-MVC4-Project-Used-To-Validate-User-Login 在开发过程中,需要用户登陆才能访问指定的页面这种功能,微软已经提供了这个特性. // 摘要: // 表示一个特性,该特性用于限制调用方对操作方法的访问. [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inhe

Ubuntu中使用Docker/LXC迅速启动一个桌面系统

2013年07月18日 | 标签: cloud, container, docker, lxc | 作者:vpsee Docker 是 dotCloud 最近几个月刚宣布的开源引擎,旨在提供一种应用程序的自动化部署解决方案,简单的说就是,在 Linux 系统上迅速创建一个容器(类似虚拟机)并在容器上部署和运行应用程序,并通过配置文件可以轻松实现应用程序的自动化安装.部署和升级,非常方便.因为使用 了容器,所以可以很方便的把生产环境和开发环境分开,互不影响,这是 docker 最普遍的一个玩法.更

以太坊开发完整去中心化应用 —— 区块链投票系统

第一节 课程概述 本课程面向初学者,内容涵盖以太坊开发相关的基本概念,并将手把手地教大家如何构建一个 基于以太坊的完整去中心化应用 -- 区块链投票系统. ethereum logo 通过本课程的学习,你将掌握: 以太坊区块链的基本知识 开发和部署以太坊合约所需的软件环境 使用高级语言(solidity)编写以太坊合约 使用NodeJS编译.部署合约并与之交互 使用Truffle框架开发分布式应用 使用控制台或网页与合约进行交互 前序知识要求 为了顺利完成本课程,最好对以下技术已经有一些基本了解

以太坊 DApp 开发入门实战! 用Node.js和truffle框架搭建——区块链投票系统!

第一节 概述 面向初学者,内容涵盖以太坊开发相关的基本概念,并将手把手地教大家如何构建一个 基于以太坊的完整去中心化应用 -- 区块链投票系统. 通过学习,你将掌握: 以太坊区块链的基本知识 开发和部署以太坊合约所需的软件环境 使用高级语言(solidity)编写以太坊合约 使用NodeJS编译.部署合约并与之交互 使用Truffle框架开发分布式应用 使用控制台或网页与合约进行交互 前序知识要求 为了顺利完成,最好对以下技术已经有一些基本了解: 一种面向对象的开发语言,例如:Python,Ru

MVC3和MVC4中CRUD操作

MVC3中EF实现的CRUD操作 public class HomeController : Controller { // // GET: /Home/ CarModelContainer db = new CarModelContainer(); #region 查询所有 +Index() public ActionResult Index() { List<CarModel> list = (from c in db.CarModel select c).ToList(); //View

如何在ASP.NET MVC和EF中使用AngularJS

(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) AngularJS作为一个越来越流行的前端框架,在使用ASP.NET MVC和实体框架开发Web应用的时候,恰当的使用它可以让你的前端界面更易开发.今天推荐的文章就是介绍如何把AngularJS结合到ASP.NET MVC开发当中. 虽然之前开发的一套SaaS系统也是以ASP.NET MVC.实体框架为基础,前端辅以AngularJS.不过一直无暇很好总结一下这方面的经验分享给大家,刚好今天推荐的文