数据库是用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: ;
padding: ;
} body {
/*background: #eff3f5;*/
background: url(/content/images/abc2.jpg);
font-size: 16px;
} label {
cursor: pointer;
height: 40px;
} h3 {
color: #;
background: #eff3f5;
height: 50px;
line-height: 50px;
padding-left: 10px;
} .emitTime {
clear: both;
font-size: 14px;
color: #;
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' || ; $("#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;
});
}, ); });
</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 = ; /// <summary>
/// angularjs获取数据
/// </summary>
/// <param name="page"></param>
/// <returns></returns>
public JsonResult Data(int page = )
{
var list = db.Comments.OrderByDescending(x => x.id).ToPagedList<Comment>(page, pagesize);
return Json(list, JsonRequestBehavior.AllowGet);
}
//用户投票结果添加
public ActionResult vote(int id=)
{
if ( id < )
{
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 = )
{
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;
}
}
}

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

  1. AngularJs打造一个简易权限系统

    AngularJs打造一个简易权限系统 一.引言 上一篇博文已经向大家介绍了AngularJS核心的一些知识点,在这篇博文将介绍如何把AngularJs应用到实际项目中.本篇博文将使用AngularJ ...

  2. Java核心知识点学习----线程中如何创建锁和使用锁 Lock,设计一个缓存系统

    理论知识很枯燥,但这些都是基本功,学完可能会忘,但等用的时候,会发觉之前的学习是非常有意义的,学习线程就是这样子的. 1.如何创建锁? Lock lock = new ReentrantLock(); ...

  3. springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑。为了区别不同的异常通常根据异常类型自定义异常类,这里我们创建一个自定义系统异常,如果controller、service、dao抛出此类异常说明是系统预期处理的异常信息。

    springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑. 1.1 异常处理思路 系统中异常包括两类:预期异常和运行时异常RuntimeEx ...

  4. Java核心知识点 --- 线程中如何创建锁和使用锁 Lock , 设计一个缓存系统

    理论知识很枯燥,但这些都是基本功,学完可能会忘,但等用的时候,会发觉之前的学习是非常有意义的,学习线程就是这样子的. 1.如何创建锁? Lock lock = new ReentrantLock(); ...

  5. 在这个应用中,我使用了 MQ 来处理异步流程、Redis 缓存热点数据、MySQL 持久化数据,还有就是在系统中调用另外一个业务系统的接口,对我的应用来说这些都是属于 RPC 调用,而 MQ、MySQL 持久化的数据也会存在于一个分布式文件系统中,他们之间的调用也是需要用 RPC 来完成数据交互的。

    在这个应用中,我使用了 MQ 来处理异步流程.Redis 缓存热点数据.MySQL 持久化数据,还有就是在系统中调用另外一个业务系统的接口,对我的应用来说这些都是属于 RPC 调用,而 MQ.MySQ ...

  6. 利用django创建一个投票网站(五)

    创建你的第一个 Django 项目, 第五部分 这一篇从第四部分(en)结尾的地方继续讲起.我们在前几章成功的构建了一个在线投票应用,在这一部分里我们将其创建一些自动化测试. 自动化测试简介 自动化测 ...

  7. 利用django创建一个投票网站(四)

    创建你的第一个 Django 项目, 第四部分 这一篇从第三部分(zh)结尾的地方继续讲起.我们将继续编写投票应用,专注于简单的表单处理并且精简我们的代码. 编写一个简单的表单 让我们更新一下在上一个 ...

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

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) AngularJS作为一个越来越流行的前端框架,在使用ASP.NET MVC和实体框架开发W ...

  9. 如何在 ASP.NET MVC 中集成 AngularJS(1)

    介绍 当涉及到计算机软件的开发时,我想运用所有的最新技术.例如,前端使用最新的 JavaScript 技术,服务器端使用最新的基于 REST 的 Web API 服务.另外,还有最新的数据库技术.最新 ...

随机推荐

  1. 2016-2017-2 《Java程序设计》课程总结 - 20155214

    2016-2017-2 <Java程序设计>课程总结 - 20155214 目录 一.每周学习总结及实验报告链接汇总 二.代码托管 给出statistic.sh的运行结果,说明本学期的代码 ...

  2. 20155226 实验一《Java开发环境的熟悉》实验报告

    20155226 实验一<Java开发环境的熟悉>实验报告 一. 实验内容及步骤 (一)使用JDK编译.运行简单的java程序 命令行下的程序开发 输入cd Code进入Code文件夹里 ...

  3. 课上实践练习——MyOd

    编写MyOD.java 用java MyOD XXX实现Linux下od -tx -tc XXX的功能 Linux下od -tx -tc XXX的功能 1.功能 od命令用于将指定文件内容以八进制.十 ...

  4. ARKit-1

    1.1-AR技术简介 增强现实技术(Augmented Reality,简称 AR),是一种实时地计算摄影机影像的位置及角度并加上相应图像.视频.3D模型的技术,这种技术的目标是在屏幕上把虚拟世界套在 ...

  5. phpcms 的模板更换

    刚安装完成后的phpcms ,自带的默认模板样式一般,可以自己换模板 首先打开phpcms文件夹,按照下图路径打开 default是存模板的文件夹 在里面新建一个文件夹 在default中主要用到的是 ...

  6. 添加jQuery方法解析url查询部分

    Web前端不同页面间传值可以使用 cookies.localStorage 和 sessionStorage 等本地存储. 但是,今天我们尝试使用 url 查询,假设我们要传递字符串 str 到 mo ...

  7. Scrapy爬去哪儿~上海一日游门票并存入MongoDB数据库

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZwAAAGGCAYAAABPDDfEAAAgAElEQVR4nOy9C3Rb1Z3/+z1Hkm35mT

  8. Siki_Unity_3-8_Lua编程(未完)

    Unity 3-8 Lua编程 任务1&2&3:前言 课程内容: Lua从入门到掌握 为之后的xLua和其他热更新方案打下基础 任务4:Lua简介 Lua是轻量小巧的脚本语言--无需编 ...

  9. 内网集群准同步shell脚本

    在公司的内网中配置集群同步,可能是代理问题,ntpd和chrony都没有用,所以只好写shell脚本解决 前提条件集群中各台机器已经配置好了免密登录 一.免密登录配置 1. 用 root 用户登录.每 ...

  10. 技本功丨请带上纸笔刷着看:解读MySQL执行计划的type列和extra列

    本萌最近被一则新闻深受鼓舞,西工大硬核“女学神”白雨桐,获6所世界顶级大学博士录取 货真价值的才貌双全,别人家的孩子 高考失利与心仪的专业失之交臂,选择了软件工程这门自己完全不懂的专业.即便全部归零, ...