数据库设计
CREATE DATABASE [InfoManagerSystem]
GO
USE [InfoManagerSystem]
GO
/****** Object: Table [dbo].[User] Script Date: 10/15/2019 08:14:50 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[User](
[UserName] [varchar](200) NOT NULL,
[UserPwd] [varchar](200) NOT NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
INSERT [dbo].[User] ([UserName], [UserPwd]) VALUES (N'Admin', N'Admin')
/****** Object: Table [dbo].[InfoManager] Script Date: 10/15/2019 08:14:49 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[InfoManager](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Title] [varchar](200) NOT NULL,
[Sort] [varchar](200) NOT NULL,
[Source] [varchar](200) NOT NULL,
[Browser] [bigint] NULL,
[Status] [int] NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
SET IDENTITY_INSERT [dbo].[InfoManager] ON
INSERT [dbo].[InfoManager] ([ID], [Title], [Sort], [Source], [Browser], [Status]) VALUES (1, N'老人与海', N'经典文学', N'湖南科技出版社', 2000, 1)
SET IDENTITY_INSERT [dbo].[InfoManager] OFF
创建MVC项目
**
创建分层并添加引用
**
实体层(Mode)
无引用,需要使用EntityFramework,使用NuGet安装
数据访问层(Dal)
引用实体层,需要使用EntityFramework,使用NuGet安装
业务逻辑层(Bll)
引用实体层,数据访问层,需要使用EntityFramework,使用NuGet安装
UI层(Web)
引用实体层,业务逻辑层,需要使用EntityFramework,使用NuGet安装
搭建完成后如图
登录HTML页面代码
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<meta name="renderer" content="webkit|ie-comp|ie-stand">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />
<meta http-equiv="Cache-Control" content="no-siteapp" />
<link href="~/static/h-ui/css/H-ui.min.css" rel="stylesheet" type="text/css" />
<link href="~/static/h-ui.admin/css/H-ui.login.css" rel="stylesheet" type="text/css" />
<link href="~/static/h-ui.admin/css/style.css" rel="stylesheet" type="text/css" />
<link href="~/lib/Hui-iconfont/1.0.8/iconfont.css" rel="stylesheet" type="text/css" />
<link rel="stylesheet" href="~/Scripts/static/common/layui/css/layui.css" />
<title>后台登录</title>
<meta name="keywords" content="网站后台模版,后台模版下载,后台管理系统模版,HTML后台模版下载">
<meta name="description" content="是一款由国人开发的轻量级扁平化网站后台模板,完全免费开源的网站后台管理系统模版,适合中小型CMS后台系统。">
</head>
<body>
<input type="hidden" id="TenantId" name="TenantId" value="" />
<div class="header"></div>
<div class="loginWraper">
username
<div id="loginform" class="loginBox">
<div>
<div class="row cl">
<label class="form-label col-xs-3"><i class="Hui-iconfont"></i></label>
<div class="formControls col-xs-8">
<input id="username" name="" type="text" placeholder="账户" class="input-text size-L">
</div>
</div>
<div class="row cl">
<label class="form-label col-xs-3"><i class="Hui-iconfont"></i></label>
<div class="formControls col-xs-8">
<input id="pwd" name="" type="password" placeholder="密码" class="input-text size-L">
</div>
</div>
<div class="row cl">
<div class="formcontrols col-xs-8 col-xs-offset-3">
<input class="input-text size-l" type="text" id="code" placeholder="验证码" οnblur="if(this.value==''){this.value='验证码:'}" οnclick="if(this.value=='验证码:'){this.value='';}" value="验证码:" style="width:150px;">
<canvas id="canvas" width="100" height="38"></canvas>
</div>
<div class="row cl">
<div class="formControls col-xs-8 col-xs-offset-3">
<label for="online">
<input type="checkbox" name="online" id="online" value="">
记住密码
</label>
</div>
</div>
<div class="row cl">
<div class="formControls col-xs-8 col-xs-offset-3">
<input name="" type="submit" class="btn btn-success radius size-L" id="login_btn" value=" 登 录 ">
<input name="" type="reset" class="btn btn-default radius size-L" value=" 取 消 ">
</div>
</div>
</div>
</div>
</div>
<div class="footer">Copyright 你的公司名称</div>
<script type="text/javascript" src="~/lib/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript" src="~/static/h-ui/js/H-ui.min.js"></script>
<script src="~/assets/layer/layer.js" type="text/javascript"></script>
<script src="~/Scripts/static/common/layui/layui.js"></script>
<script src="~/Scripts/static/admin/js/canvas.js"></script>
<script>
var _hmt = _hmt || [];
(function () {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?080836300300be57b7f34f4b3e97d911";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
</body>
</html>
<script>
$(function () {
//页面加载刷新验证码
var show_num = [];
draw(show_num);
//点击图片刷新验证码
$("#canvas").on('click', function () {
draw(show_num);
})
layui.use('form', function () {
var form = layui.form,
layer = layui.layer,
$ = layui.jquery;
});
$("#login_btn").click(function () {
var data = {};
data.UserName = $("#username").val();
data.UserPwd = $("#pwd").val();
//验证码校验
var val = $("#code").val().toLowerCase();
var num = show_num.join("");
if (val == '') {
layer.alert('请输入验证码!');
} else if (val != num) {
layer.alert('验证码错误!请重新输入!');
$("#code").val('');
draw(show_num);
}
else {
$.ajax({
data: data,
type: "post",
url: "/AdminUser/Query",
success: function (result) {
if (result.Success) {
layer.alert('登录成功!', {
title: '提示框',
icon: 1,
});
location.href = "/Home/Index";
layer.close(index);
} else {
layer.alert('登录失败!', {
title: '提示框',
icon: 1,
});
}
}
})
}
})
});
</script>
主页HTML代码
@{
Layout = null;
}
@using Zhongjiali.ManagerSys.Web.Models;
@using Zhongjiali.ManagerSys.Modles;
@{
ViewBag.Title = "Home Page";
var admin = AdminContext.context.adminUser;
}
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<meta name="renderer" content="webkit|ie-comp|ie-stand">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />
<meta http-equiv="Cache-Control" content="no-siteapp" />
<link rel="Bookmark" href="~/favicon.ico">
<link rel="Shortcut Icon" href="~/favicon.ico" />
<link rel="stylesheet" type="text/css" href="~/static/h-ui/css/H-ui.min.css" />
<link rel="stylesheet" type="text/css" href="~/static/h-ui.admin/css/H-ui.admin.css" />
<link rel="stylesheet" type="text/css" href="~/lib/Hui-iconfont/1.0.8/iconfont.css" />
<link rel="stylesheet" type="text/css" href="~/static/h-ui.admin/skin/default/skin.css" id="skin" />
<link rel="stylesheet" type="text/css" href="~/static/h-ui.admin/css/style.css" />
<script type="text/javascript" src="~/lib/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript" src="~/lib/layer/2.4/layer.js"></script>
<script type="text/javascript" src="~/static/h-ui/js/H-ui.min.js"></script>
<script type="text/javascript" src="~/static/h-ui.admin/js/H-ui.admin.js"></script> <!--/_footer 作为公共模版分离出去-->
<!--请在下方写此页面业务相关的脚本-->
<script type="text/javascript" src="~/lib/jquery.contextmenu/jquery.contextmenu.r2.js"></script>
<title>H-ui.admin v3.1</title>
<meta name="keywords" content="H-ui.admin v3.1,H-ui网站后台模版,后台模版下载,后台管理系统模版,HTML后台模版下载">
<meta name="description" content="H-ui.admin v3.1,是一款由国人开发的轻量级扁平化网站后台模板,完全免费开源的网站后台管理系统模版,适合中小型CMS后台系统。">
</head>
<body>
<header class="navbar-wrapper">
<div class="navbar navbar-fixed-top">
<div class="container-fluid cl">
<a class="logo navbar-logo f-l mr-10 hidden-xs" href="/aboutHui.shtml">H-ui.admin</a> <a class="logo navbar-logo-m f-l mr-10 visible-xs" href="/aboutHui.shtml">H-ui</a>
<span class="logo navbar-slogan f-l mr-10 hidden-xs">v3.1</span>
<a aria-hidden="false" class="nav-toggle Hui-iconfont visible-xs" href="javascript:;"></a>
<nav class="nav navbar-nav">
<ul class="cl">
<li class="dropDown dropDown_hover">
<a href="javascript:;" class="dropDown_A"><i class="Hui-iconfont"></i> 新增 <i class="Hui-iconfont"></i></a>
<ul class="dropDown-menu menu radius box-shadow">
<li><a href="javascript:;" οnclick="article_add('添加资讯','article-add.html')"><i class="Hui-iconfont"></i> 资讯</a></li>
<li><a href="javascript:;" οnclick="picture_add('添加资讯','picture-add.html')"><i class="Hui-iconfont"></i> 图片</a></li>
<li><a href="javascript:;" οnclick="product_add('添加资讯','product-add.html')"><i class="Hui-iconfont"></i> 产品</a></li>
<li><a href="javascript:;" οnclick="member_add('添加用户','member-add.html','','510')"><i class="Hui-iconfont"></i> 用户</a></li>
</ul>
</li>
</ul>
</nav>
<nav id="Hui-userbar" class="nav navbar-nav navbar-userbar hidden-xs">
<ul class="cl">
<li>超级管理员</li>
<li class="dropDown dropDown_hover">
<a href="#" class="dropDown_A">
欢迎光临 @if (admin != null)
{@admin.UserName}
<i class="Hui-iconfont"></i>
</a>
<ul class="dropDown-menu menu radius box-shadow">
<li><a href="javascript:;" onClick="myselfinfo()">个人信息</a></li>
<li><a href="#">切换账户</a></li>
<li><a href="#">退出</a></li>
</ul>
</li>
<li id="Hui-msg"> <a href="#" title="消息"><span class="badge badge-danger">1</span><i class="Hui-iconfont" style="font-size:18px"></i></a> </li>
<li id="Hui-skin" class="dropDown right dropDown_hover">
<a href="javascript:;" class="dropDown_A" title="换肤"><i class="Hui-iconfont" style="font-size:18px"></i></a>
<ul class="dropDown-menu menu radius box-shadow">
<li><a href="javascript:;" data-val="default" title="默认(黑色)">默认(黑色)</a></li>
<li><a href="javascript:;" data-val="blue" title="蓝色">蓝色</a></li>
<li><a href="javascript:;" data-val="green" title="绿色">绿色</a></li>
<li><a href="javascript:;" data-val="red" title="红色">红色</a></li>
<li><a href="javascript:;" data-val="yellow" title="黄色">黄色</a></li>
<li><a href="javascript:;" data-val="orange" title="橙色">橙色</a></li>
</ul>
</li>
</ul>
</nav>
</div>
</div>
</header>
<aside class="Hui-aside">
<div class="menu_dropdown bk_2">
<dl id="menu-article">
<dt><i class="Hui-iconfont"></i> 资讯管理<i class="Hui-iconfont menu_dropdown-arrow"></i></dt>
<dd>
<ul>
<li><a data-href="articlelist" data-title="资讯管理" href="javascript:void(0)">资讯管理</a></li>
</ul>
</dd>
</dl>
<dl id="menu-picture">
<dt><i class="Hui-iconfont"></i> 图片管理<i class="Hui-iconfont menu_dropdown-arrow"></i></dt>
<dd>
<ul>
<li><a data-href="picture-list.html" data-title="图片管理" href="javascript:void(0)">图片管理</a></li>
</ul>
</dd>
</dl>
<dl id="menu-product">
<dt><i class="Hui-iconfont"></i> 产品管理<i class="Hui-iconfont menu_dropdown-arrow"></i></dt>
<dd>
<ul>
<li><a data-href="product-brand.html" data-title="品牌管理" href="javascript:void(0)">品牌管理</a></li>
<li><a data-href="product-category.html" data-title="分类管理" href="javascript:void(0)">分类管理</a></li>
<li><a data-href="product-list.html" data-title="产品管理" href="javascript:void(0)">产品管理</a></li>
</ul>
</dd>
</dl>
<dl id="menu-comments">
<dt><i class="Hui-iconfont"></i> 评论管理<i class="Hui-iconfont menu_dropdown-arrow"></i></dt>
<dd>
<ul>
<li><a data-href="http://h-ui.duoshuo.com/admin/" data-title="评论列表" href="javascript:;">评论列表</a></li>
<li><a data-href="feedback-list.html" data-title="意见反馈" href="javascript:void(0)">意见反馈</a></li>
</ul>
</dd>
</dl>
<dl id="menu-member">
<dt><i class="Hui-iconfont"></i> 会员管理<i class="Hui-iconfont menu_dropdown-arrow"></i></dt>
<dd>
<ul>
<li><a data-href="member-list.html" data-title="会员列表" href="javascript:;">会员列表</a></li>
<li><a data-href="member-del.html" data-title="删除的会员" href="javascript:;">删除的会员</a></li>
<li><a data-href="member-level.html" data-title="等级管理" href="javascript:;">等级管理</a></li>
<li><a data-href="member-scoreoperation.html" data-title="积分管理" href="javascript:;">积分管理</a></li>
<li><a data-href="member-record-browse.html" data-title="浏览记录" href="javascript:void(0)">浏览记录</a></li>
<li><a data-href="member-record-download.html" data-title="下载记录" href="javascript:void(0)">下载记录</a></li>
<li><a data-href="member-record-share.html" data-title="分享记录" href="javascript:void(0)">分享记录</a></li>
</ul>
</dd>
</dl>
<dl id="menu-admin">
<dt><i class="Hui-iconfont"></i> 管理员管理<i class="Hui-iconfont menu_dropdown-arrow"></i></dt>
<dd>
<ul>
<li><a data-href="admin-role.html" data-title="角色管理" href="javascript:void(0)">角色管理</a></li>
<li><a data-href="admin-permission.html" data-title="权限管理" href="javascript:void(0)">权限管理</a></li>
<li><a data-href="AdminList" data-title="管理员列表" href="javascript:void(0)">管理员列表</a></li>
</ul>
</dd>
</dl>
<dl id="menu-tongji">
<dt><i class="Hui-iconfont"></i> 系统统计<i class="Hui-iconfont menu_dropdown-arrow"></i></dt>
<dd>
<ul>
<li><a data-href="charts-1.html" data-title="折线图" href="javascript:void(0)">折线图</a></li>
<li><a data-href="charts-2.html" data-title="时间轴折线图" href="javascript:void(0)">时间轴折线图</a></li>
<li><a data-href="charts-3.html" data-title="区域图" href="javascript:void(0)">区域图</a></li>
<li><a data-href="charts-4.html" data-title="柱状图" href="javascript:void(0)">柱状图</a></li>
<li><a data-href="charts-5.html" data-title="饼状图" href="javascript:void(0)">饼状图</a></li>
<li><a data-href="charts-6.html" data-title="3D柱状图" href="javascript:void(0)">3D柱状图</a></li>
<li><a data-href="charts-7.html" data-title="3D饼状图" href="javascript:void(0)">3D饼状图</a></li>
</ul>
</dd>
</dl>
<dl id="menu-system">
<dt><i class="Hui-iconfont"></i> 系统管理<i class="Hui-iconfont menu_dropdown-arrow"></i></dt>
<dd>
<ul>
<li><a data-href="system-base.html" data-title="系统设置" href="javascript:void(0)">系统设置</a></li>
<li><a data-href="system-category.html" data-title="栏目管理" href="javascript:void(0)">栏目管理</a></li>
<li><a data-href="system-data.html" data-title="数据字典" href="javascript:void(0)">数据字典</a></li>
<li><a data-href="system-shielding.html" data-title="屏蔽词" href="javascript:void(0)">屏蔽词</a></li>
<li><a data-href="system-log.html" data-title="系统日志" href="javascript:void(0)">系统日志</a></li>
</ul>
</dd>
</dl>
</div>
</aside>
<div class="dislpayArrow hidden-xs"><a class="pngfix" href="javascript:void(0);" onClick="displaynavbar(this)"></a></div>
<section class="Hui-article-box">
<div id="Hui-tabNav" class="Hui-tabNav hidden-xs">
<div class="Hui-tabNav-wp">
<ul id="min_title_list" class="acrossTab cl">
<li class="active">
@*<span title="我的桌面" data-href="Welcome">我的桌面</span>*@
<em></em>
</li>
</ul>
</div>
<div class="Hui-tabNav-more btn-group"><a id="js-tabNav-prev" class="btn radius btn-default size-S" href="javascript:;"><i class="Hui-iconfont"></i></a><a id="js-tabNav-next" class="btn radius btn-default size-S" href="javascript:;"><i class="Hui-iconfont"></i></a></div>
</div>
<div id="iframe_box" class="Hui-article">
<div class="show_iframe">
<div style="display:none" class="loading"></div>
<iframe scrolling="yes" frameborder="0" src="Welcome"></iframe>
</div>
</div>
</section>
<div class="contextMenu" id="Huiadminmenu">
<ul>
<li id="closethis">关闭当前 </li>
<li id="closeall">关闭全部 </li>
</ul>
</div>
<!--_footer 作为公共模版分离出去-->
</body>
</html>
<script type="text/javascript">
$(function () {
});
/*个人信息*/
function myselfinfo() {
layer.open({
type: 1,
area: ['300px', '200px'],
fix: false, //不固定
maxmin: true,
shade: 0.4,
title: '查看信息',
content: '<div>管理员信息</div>'
});
}
/*资讯-添加*/
function article_add(title, url) {
var index = layer.open({
type: 2,
title: title,
content: url
});
layer.full(index);
}
/*图片-添加*/
function picture_add(title, url) {
var index = layer.open({
type: 2,
title: title,
content: url
});
layer.full(index);
}
/*产品-添加*/
function product_add(title, url) {
var index = layer.open({
type: 2,
title: title,
content: url
});
layer.full(index);
}
/*用户-添加*/
function member_add(title, url, w, h) {
layer_show(title, url, w, h);
}
</script>
</body>
**
Mode层
**
使用EF
**
搭建完成后自动生成的实体类如下
**
User类
namespace DaysGone.ManagerSys.Mode
{
using System;
using System.Collections.Generic;
public partial class User
{
public string UserName { get; set; }
public string UserPwd { get; set; }
}
}
InfoManager类
namespace DaysGone.ManagerSys.Mode
{
using System;
using System.Collections.Generic;
public partial class InfoManager
{
public int ID { get; set; }
public string Title { get; set; }
public string Sort { get; set; }
public string Source { get; set; }
public Nullable<long> Browser { get; set; }
public Nullable<int> Status { get; set; }
}
}
Result类
namespace DaysGone.ManagerSys.Mode
{
public class OperateResult
{
public bool Success;
}
}
**
数据访问层
**
数据访问层需要引用Mode层
BaseRepository类
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
namespace DaysGone.ManagerSys.Dal
{
public class BaseRepository<T, TS> where T : class
where TS : DbContext, new()
{
private DbContext db = DbContextFactory<TS>.GetCurrentDbContext();
//添加单条记录
public bool Add(T entily)
{
db.Set<T>().Add(entily);
return db.SaveChanges() > 0;
}
//添加多条记录
public bool AddList(List<T> entily)
{
db.Set<T>().AddRange(entily);
return db.SaveChanges() > 0;
}
//删除
public bool DELETE(T entily)
{
db.Entry(entily).State = EntityState.Deleted;
return db.SaveChanges() > 0;
}
//删除多个
public bool BDELETE(List<T> entiles)
{
db.Set<T>().RemoveRange(entiles);
return db.SaveChanges() > 0;
}
//根据id删除
public bool BatchDELETE(params int[] entiles)
{
foreach (var id in entiles)
{
var entity = db.Set<T>().Find(id);
if (entity != null)
{
db.Set<T>().Remove(entity);
}
}
return db.SaveChanges() > 0;
}
//修改
public bool Update(T entily)
{
db.Entry(entily).State = EntityState.Modified;
return db.SaveChanges() > 0;
}
//查询一个集合
public List<T> QueryList(Expression<Func<T, bool>> lambdaExpression)
{
return db.Set<T>().Where(lambdaExpression).ToList();
}
//查询一个对象,如果没有返回null
public T Query(Expression<Func<T, bool>> lambdaExpression)
{
return db.Set<T>().SingleOrDefault(lambdaExpression);
}
public bool Exists(Expression<Func<T, bool>> lambdaExpression)
{
return db.Set<T>().Any(lambdaExpression);
}
//分页查询
public List<T> QuerypageList<S>(int pageIndex, int pageSize, Expression<Func<T, bool>> wheredma, Expression<Func<T, S>> orderbyLamba, out int count, bool isAc = true)
{
count = db.Set<T>().Where(wheredma).Count();
if (!isAc)
{
return db.Set<T>().Where(wheredma).OrderByDescending(orderbyLamba).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
}
else
{
return db.Set<T>().Where(wheredma).OrderBy(orderbyLamba).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
}
}
}
}
UserRepository类
public partial class UserRepository : BaseRepository<User,InfoManagerSystemEntities>
{
}
InfoManagerRepository类
public partial class InfoManagerRepository : BaseRepository<InfoManager,InfoManagerSystemEntities>
{
}
**
业务逻辑层
**
BaseService类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using DaysGone.ManagerSys.DAL;
using DaysGone.ManagerSys.Mode;
namespace DaysGone.ManagerSys.Bll
{
public class BaseService<T> where T : class
{
private BaseRepository<T, InfoManagerSystemEntities> baseRepository = new BaseRepository<T, InfoManagerSystemEntities>();
//添加单条记录
public virtual bool Add(T entily)
{
return baseRepository.Add(entily);
}
//添加多条记录
public virtual bool AddList(List<T> entily)
{
return baseRepository.AddList(entily);
}
//删除
public virtual bool DELETE(T entily)
{
return baseRepository.DELETE(entily);
}
//删除多个
public virtual bool BDELETE(List<T> entiles)
{
return baseRepository.BDELETE(entiles);
}
//根据id删除
public bool BatchDELETE(params int[] entiles)
{
return baseRepository.BatchDELETE(entiles);
}
//修改
public virtual bool Update(T entily)
{
return baseRepository.Update(entily);
}
//查询一个集合
public virtual List<T> QueryList(Expression<Func<T, bool>> lambdaExpression)
{
return baseRepository.QueryList(lambdaExpression);
}
//查询一个对象,如果没有返回null
public virtual T Query(Expression<Func<T, bool>> lambdaExpression)
{
return baseRepository.Query(lambdaExpression);
}
public virtual bool Exists(Expression<Func<T, bool>> lambdaExpression)
{
return baseRepository.Exists(lambdaExpression);
}
//分页查询
public virtual List<T> QuerypageList<S>(int pageIndex, int pageSize, Expression<Func<T, bool>> wheredma, Expression<Func<T, S>> orderbyLamba, out int count, bool isAc = true)
{
return baseRepository.QuerypageList(pageIndex, pageSize, wheredma, orderbyLamba, out count, isAc);
}
}
}
InfoManagerService类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using DaysGone.ManagerSys.Mode;
namespace DaysGone.ManagerSys.Bll
{
public class InfoManagerService : BaseService<InfoManager>
{
public InfoManager SelectInfoMangers(int id)
{
return Query(a => a.ID == id);
}
}
}
**AdminUserService类
**
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using DaysGone.ManagerSys.Mode;
namespace DaysGone.ManagerSys.Bll
{
public class AdminUserService : BaseService<User>
{
/// <summary>
/// 记住密码
/// </summary>
/// <param name="users"></param>
/// <returns></returns>
public User AdminByReader(User users)
{
return Query(a => a.UserName == users.UserName && a.UserPwd == users.UserPwd);
}
}
}
**
UI层
**
AdminContext类(Models文件夹内
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.SessionState;
using DaysGone.ManagerSys.Modles;
namespace DaysGone.ManagerSys.Web.Models
{
public class AdminContext
{
/// <summary>
/// 设置key值
/// </summary>
private const string sessionKey = "AdminInfo_session_Key";
public HttpSessionState httpSession => HttpContext.Current.Session;
/// <summary>
/// 设置静态 上下文
/// </summary>
public static AdminContext context = new AdminContext();
/// <summary>
/// 设置用户表
/// </summary>
public User adminUser
{
get
{
return httpSession[sessionKey] as User;
}
set
{
httpSession[sessionKey] = value;
}
}
}
}
ResultDataSet类(Models文件夹内)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace DaysGone.ManagerSys.Web.Models
{
public class ResultDataSet<T>
{
public int code { get; set; }
public string msg { get; set; }
public int count { get; set; }
public List<T> data { get; set; }
}
}
**
过滤器(Attributes文件夹内)
**
行为过滤器(ActionAttribute)
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using DaysGone.ManagerSys.Web.Models;
namespace DaysGone.ManagerSys.Web.Attributes
{
public class ActionAttribute : ActionFilterAttribute //行为过滤器
{
/// <summary>
/// 调用控制器对应的Action方法之后的操作
/// </summary>
/// <param name="filterContext"></param>
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
if (AdminContext.context.adminUser != null)
{
//获取用户名
string username = AdminContext.context.adminUser.UserName;
string controller = filterContext.RouteData.Values["Controller"].ToString();
string action = filterContext.RouteData.Values["Action"].ToString();
//获取系统的日志
string msg = $"时间:{DateTime.Now},用户名:{username},已完成控制器:{controller},页面:{action}";
//获取文件路径
string path = "D:\\lj.txt";
File.AppendAllText(path, msg);
}
}
/// <summary>
/// 调用控制器对应的Action方法之前的操作
/// </summary>
/// <param name="filterContext"></param>
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (AdminContext.context.adminUser != null)
{
string username = AdminContext.context.adminUser.UserName;
string controller = filterContext.RouteData.Values["Controller"].ToString();
string action = filterContext.RouteData.Values["Action"].ToString();
//获取系统的日志
string msg = $"时间:{DateTime.Now},用户名:{username},正在操作控制器:{controller},页面:{action}";
//获取文件路径
string path = "D:\\Exception.txt";
File.AppendAllText(path, msg);
}
//获取用户名
}
/// <summary>
/// 调用控制器对应的Action方法之后页面渲染之后的操作
/// </summary>
/// <param name="filterContext"></param>
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
}
/// <summary>
/// 调用控制器对应的Action方法之后页面渲染之前的操作
/// </summary>
/// <param name="filterContext"></param>
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
}
}
}
异常过滤器(ExceptionAttribute)
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace DaysGone.ManagerSys.Web.Attributes
{
public class ExceptionAttribute : HandleErrorAttribute //异常过滤器
{
/// <summary>
/// 系统发生异常的操作
/// </summary>
/// <param name="filterContext"></param>
public override void OnException(ExceptionContext filterContext)
{
//Exception exception = filterContext.Exception;
//string msg = exception.Message;
//获取系统的日志
string exception = filterContext.Exception.ToString();
string msg = $"时间:{DateTime.Now},系统出错:{exception}";
//获取文件路径
string path = "D:\\Exception.txt";
//如果文件不存在则创建
/*if (!File.Exists(path))
{
File.Create(path);
}*/
File.AppendAllText(path, msg);
}
}
}
权限过滤器(PermissionAttribute)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using DaysGone.ManagerSys.Web.Models;
namespace DaysGone.ManagerSys.Web.Attributes
{
public class PermissionAttribute : AuthorizeAttribute //权限过滤器
{
/// <summary>
/// 判断认证是否通过
/// </summary>
/// <param name="httpContext"></param>
/// <returns></returns>
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
//如果上下文不为空
if (AdminContext.context.adminUser != null && httpContext.Session != null)
{
return true;
}
return false;
}
/// <summary>
///认证不通过的时候所做的操作
/// </summary>
/// <param name="filterContext"></param>
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
//获取用户请求的地址
string path = filterContext.HttpContext.Request.Path;
//自定义路由跳转
Dictionary<string, object> keys = new Dictionary<string, object>();
keys.Add("Controller", "Home");
keys.Add("Action", "Login");
keys.Add("ReturnUrl", path);
var routeValue = new RouteValueDictionary(keys);
//根据指定路由跳转
filterContext.Result = new RedirectToRouteResult(routeValue);
}
}
}
**
控制器(Controllers文件夹内)
**
AdminUserController类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Web;
using System.Web.Mvc;
using DaysGone.ManagerSys.Mode;
using DaysGone.ManagerSys.Bll;
using DaysGone.ManagerSys.Web.Models;
namespace DaysGone.ManagerSys.Web.Controllers
{
public class AdminUserController : Controller
{
public JsonResult Add(InfoManager infoManager)
{
ModueService modueService = new ModueService();
OperateResult operateResult = new OperateResult
{
Success = modueService.Add(infoManager)
};
return Json(operateResult);
}
//修改
public JsonResult Update(InfoManager infoManager)
{
InfoManagerService infoManagerService = new InfoManagerService();
OperateResult operateResult = new OperateResult
{
Success = infoManagerService.Update(infoManager)
};
return Json(operateResult);
}
#region 登陆操作
/// <summary>
/// 登陆
/// </summary>
/// <param name="name"></param>
/// <param name="password"></param>
/// <returns></returns>
public JsonResult Query(User users)
{
AdminUserService adminUserService = new AdminUserService();
OperateResult result = new OperateResult();
User user = users;
Expression<Func<User, bool>> lambdaExpression = a => a.UserName==users.UserName && a.UserPwd==users.UserPwd;
//调用业务层的lamdam表达式的记住密码
user= adminUserService.AdminByReader(user);
result.Success = adminUserService.Query(lambdaExpression) != null;
if(result.Success)
{
//创建Cookie对象
HttpCookie httpCookie = new HttpCookie("CookieName");
httpCookie.Values.Add("UserName", user.UserName);
httpCookie.Values.Add("UserPwd", user.UserPwd);
//设置过期时间
httpCookie.Values.Add("time",DateTime.Now.AddDays(7).ToString());
//添加Cookie对象
System.Web.HttpContext.Current.Response.Cookies.Add(httpCookie);
}
//给上下文赋值
AdminContext.context.adminUser = user;
return Json(result);
}
#endregion
//删除单条数据
public JsonResult DELETE(InfoManager infoManager)
{
ModueService modueService = new ModueService();
OperateResult operateResult = new OperateResult
{
Success = modueService.DELETE(infoManager)
};
return Json(operateResult);
}
/// <summary>
/// 去除session和cookie
/// </summary>
/// <returns></returns>
#region 去除session和cookie
public ActionResult AdminOut()
{
//清除session
AdminContext.context.adminUser = null;
//获取cookie
HttpCookie cok = Response.Cookies["UserName"];
if (cok != null)
{
cok.Values.Clear();
}
return Redirect("/Home/login");
}
#endregion
//分页查询
public JsonResult GetMoudelList(int page, int limit)
{
InfoManagerService infoManagerService = new InfoManagerService();
ResultDataSet<InfoManager> resultDataSet = new ResultDataSet<InfoManager>
{
code = 0,
msg = string.Empty,
count = 0
};
int count = 0;
List<InfoManager> modules = new List<InfoManager>();
Expression<Func<InfoManager, bool>> whereLambda = a =>true;
Expression<Func<InfoManager, int>> orderbyLambda = a => a.ID;
resultDataSet.data = infoManagerService.QuerypageList(page, limit, whereLambda, orderbyLambda, out count);
return Json(resultDataSet,JsonRequestBehavior.AllowGet);
}
// GET: AdminUser
public ActionResult Index()
{
return View();
}
}
}
HomeController类(Controllers文件夹内)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using DaysGone.ManagerSys.Mode;
using DaysGone.ManagerSys.Bll;
using DaysGone.ManagerSys.Web.Attributes;
using DaysGone.ManagerSys.Web.Models;
namespace DaysGone.ManagerSys.Web.Controllers
{
public class HomeController : Controller
{
[PermissionAttribute]
public ActionResult Index()
{
return View();
}
public ActionResult adminlist()
{
return View();
}
public ActionResult articleadd()
{
return View();
}
public ActionResult articlelist()
{
return View();
}
public ActionResult login()
{
HttpCookie cookie = System.Web.HttpContext.Current.Request.Cookies.Get("CookieName");
if (cookie != null)
{
string name = cookie["UserName"];//等同于string name = cookie.Values.Get("UserName");
string pwd = cookie["UserPwd"];
DateTime time = DateTime.Parse(cookie["time"]);
if (name != null && pwd != null && time != null && DateTime.Now < time)
{
//将Cookie中的值赋给上下文session 使其在不登录时页面也能够显示
AdminContext.context.adminUser = new User()
{
UserName = name,
UserPwd = pwd
};
return Redirect("/Home/Index");
}
}
return View();
}
public ActionResult About()
{
ViewBag.Message = "Your application description page.";
return View();
}
public ActionResult Contact()
{
ViewBag.Message = "Your contact page.";
return View();
}
}
}