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: ;
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实现一个投票系统的更多相关文章
- AngularJs打造一个简易权限系统
AngularJs打造一个简易权限系统 一.引言 上一篇博文已经向大家介绍了AngularJS核心的一些知识点,在这篇博文将介绍如何把AngularJs应用到实际项目中.本篇博文将使用AngularJ ...
- Java核心知识点学习----线程中如何创建锁和使用锁 Lock,设计一个缓存系统
理论知识很枯燥,但这些都是基本功,学完可能会忘,但等用的时候,会发觉之前的学习是非常有意义的,学习线程就是这样子的. 1.如何创建锁? Lock lock = new ReentrantLock(); ...
- springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑。为了区别不同的异常通常根据异常类型自定义异常类,这里我们创建一个自定义系统异常,如果controller、service、dao抛出此类异常说明是系统预期处理的异常信息。
springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑. 1.1 异常处理思路 系统中异常包括两类:预期异常和运行时异常RuntimeEx ...
- Java核心知识点 --- 线程中如何创建锁和使用锁 Lock , 设计一个缓存系统
理论知识很枯燥,但这些都是基本功,学完可能会忘,但等用的时候,会发觉之前的学习是非常有意义的,学习线程就是这样子的. 1.如何创建锁? Lock lock = new ReentrantLock(); ...
- 在这个应用中,我使用了 MQ 来处理异步流程、Redis 缓存热点数据、MySQL 持久化数据,还有就是在系统中调用另外一个业务系统的接口,对我的应用来说这些都是属于 RPC 调用,而 MQ、MySQL 持久化的数据也会存在于一个分布式文件系统中,他们之间的调用也是需要用 RPC 来完成数据交互的。
在这个应用中,我使用了 MQ 来处理异步流程.Redis 缓存热点数据.MySQL 持久化数据,还有就是在系统中调用另外一个业务系统的接口,对我的应用来说这些都是属于 RPC 调用,而 MQ.MySQ ...
- 利用django创建一个投票网站(五)
创建你的第一个 Django 项目, 第五部分 这一篇从第四部分(en)结尾的地方继续讲起.我们在前几章成功的构建了一个在线投票应用,在这一部分里我们将其创建一些自动化测试. 自动化测试简介 自动化测 ...
- 利用django创建一个投票网站(四)
创建你的第一个 Django 项目, 第四部分 这一篇从第三部分(zh)结尾的地方继续讲起.我们将继续编写投票应用,专注于简单的表单处理并且精简我们的代码. 编写一个简单的表单 让我们更新一下在上一个 ...
- 如何在ASP.NET MVC和EF中使用AngularJS
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) AngularJS作为一个越来越流行的前端框架,在使用ASP.NET MVC和实体框架开发W ...
- 如何在 ASP.NET MVC 中集成 AngularJS(1)
介绍 当涉及到计算机软件的开发时,我想运用所有的最新技术.例如,前端使用最新的 JavaScript 技术,服务器端使用最新的基于 REST 的 Web API 服务.另外,还有最新的数据库技术.最新 ...
随机推荐
- 20155236 《Java程序设计》实验五(网络编程与安全)实验报告
20155236 <Java程序设计>实验五(网络编程与安全)实验报告 一.实验内容及步骤 任务一: 编写MyBC.java实现中缀表达式转后缀表达式的功能 编写MyDC.java实现从上 ...
- 20155308 2016-2017-2《Java程序设计》课堂实践项目
20155308 2016-2017-2<Java程序设计>课堂实践项目 在java.lang包中有String.split()方法,返回是一个数组 我在应用中用到一些,给大家总结一下,仅 ...
- 20155334 2016-2017-2 《Java程序设计》第四周学习总结
20155334 2016-2017-2 <Java程序设计>第四周学习总结 教材学习内容总结 第六章:继承与多态 继承:面对对象中,子类继承父类,避免重复的行为定义 extends表示会 ...
- httpclient在获取response的entity时报异常
httpClient报异常:Premature end of chunk coded message body: closing chunk expected 首先这个异常提示直译过来就是:被编码信息 ...
- MSP430的JTAG接口和BSW接口
1.JTAG口,JTAG引脚如下定义: 单片机TCK——测试时钟输入,接仿真器7脚 单片机TDI——测试数据输入,接仿真器2脚 单片机TDO——测试数据输出,接仿真器1脚 单片机TMS——测试 ...
- Linux TCP/IP调优参数 /proc/sys/net/目录
所有的TCP/IP调优参数都位于/proc/sys/net/目录. 例如, 下面是最重要的一些调优参数,后面是它们的含义: /proc/sys/net/core/rmem_default " ...
- 怎样安装TortoiseGit
TortoiseGit是基于Windows的Git图形化工具 访问 https://tortoisegit.org/
- MySQL数据库--连接
MySQL数据库的概念: MySQL数据库,包括客户端和服务端.客户端就是操作数据库的终端(命令行.navicat),服务端就是安装有MySQL软件的主机(本机或者服务器),MySQL数据库的端口一般 ...
- https双向认证网站搭建
新建网站 在搭建网站证书之前,我们先搭建好我们的网站 1.网站基本搭建 为我们的项目新建一个网站,按照如下的步骤来 1,打开IIS,右键单击网站弹出菜单,选择网站(如图1.1.1) 图1.1.1 2, ...
- 关于 WebView 知识点的详解
什么是 WebView WebView 是手机中内置了一款高性能 webkit 内核浏览器,在 SDK 中封装的一个组件.没有提供地址栏和导航栏, WebView 只是单纯的展示一个网页界面.在开发中 ...