第一步:打开VS软件,新建项目,创建MVC
第二步:导入CSS,JS,页面模板
第三步:运行模板,看看是否正常,有错修改,无错继续
第四步:创建类
1.实体类
新建一个实体类库,在类库里添加ADO.NET实体模型将数据库里的表转换为实体类,然后在程序包管理里面安装EntityFramework包。
Create database Test;
use Test;
create table Login(
Id [int] IDENTITY(1,1) NOT NULL,
UserName varchar(50),
UserPass varchar(50),
LoginTime datetime)
create table Functon(
[Id] [int] IDENTITY(1,1) NOT NULL,
[MenuId] [int] NULL,
[Name] [varchar](50) NULL,
[ControllerName] [varchar](50) NULL,
[ActionName] [varchar](50) NULL,
[FunctionCode] [varchar](50) NULL,
[Remark] [varchar](200) NULL,)
2.数据访问层
建一个数据访问层类库,在类库里添加EF 6.x DbContext生成器,然后再将Test.tt里面的内容替换成T4模板的内容,再将T4模板里的路径和引用改成这个项目的路径和引用就行了,然后保存就能生成数据访问层,再在数据库访问层类库添加一个基类和唯一获取实例类。
3.业务逻辑层
建一个业务层类库,然后再类库里添加一个基类,添加数据访问层的引用。代码如下:
public class BaseService<T> where T : class
{
private BaseRepository<T, TestEntities> baseRepository = new BaseRepository<T,TestEntities>();
#region 添加
/// <summary>
/// 单表添加一条记录
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public virtual bool Add(T entity)
{
return baseRepository.Add(entity);
}
/// <summary>
/// 单表的添加多条记录
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public virtual bool AddRange(List<T> entity)
{
return baseRepository.AddRange(entity);
}
#endregion
#region 修改
/// <summary>
/// 单表的修改数据
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public virtual bool Update(T entity)
{
return baseRepository.Update(entity);
}
#endregion
#region 删除
/// <summary>
/// 单表的删除数据
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public virtual bool Delete(T entity)
{
return baseRepository.Delete(entity);
}
/// <summary>
/// 删除多个数据
/// </summary>
/// <param name="entities"></param>
/// <returns></returns>
public virtual bool BactchDelete(List<T> entities)
{
return baseRepository.BactchDelete(entities);
}
/// <summary>
/// 根据id删除多个实体
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
public virtual bool BactchDelete(params int[] ids)
{
return baseRepository.BactchDelete(ids);
}
#endregion
#region 查询
/// <summary>
/// 查询返回一个集合
/// </summary>
/// <param name="lambdaExpression"></param>
/// <returns></returns>
public virtual List<T> QueryList(Expression<Func<T, bool>> lambdaExpression)
{
return baseRepository.QueryList(lambdaExpression);
}
/// <summary>
/// 查询返回一个对象,没有返回null
/// </summary>
/// <param name="lambdaExpression"></param>
/// <returns></returns>
public virtual T Query(Expression<Func<T, bool>> lambdaExpression)
{
return baseRepository.Query(lambdaExpression);
}
/// <summary>
/// 判断是否存在
/// </summary>
/// <param name="lambdaExpression"></param>
/// <returns></returns>
public virtual bool QueryExists(Expression<Func<T, bool>> lambdaExpression)
{
return baseRepository.QueryExists(lambdaExpression);
}
/// <summary>
/// 分页查询
/// </summary>
/// <typeparam name="S"></typeparam>
/// <param name="pageIndex">分页下标</param>
/// <param name="pageSize">每页行数</param>
/// <param name="whereLambda">查询条件</param>
/// <param name="orderbyLambda">排序条件</param>
/// <param name="count">查询到的数据总数</param>
/// <param name="isAsc">判断排序方式</param>
/// <returns></returns>
public virtual List<T> QueryPageList<S>(int pageIndex, int pageSize, Expression<Func<T, bool>> whereLambda, Expression<Func<T, S>> orderbyLambda, out int count, bool isAsc = true)
{
return baseRepository.QueryPageList(pageIndex, pageSize, whereLambda, orderbyLambda, out count, isAsc);
}
#endregion
}
登录类LoginService:
//继承数据访问里的基类
public class LoginService:BaseService<Login>
{
}
功能类:
public class FunctionService : BaseService<Functon>
{
}
第五步:
1.登录控制器,添加业务层和实体层的引用:
实现登录:
如果记住密码调用第一个方法,如果不记住密码调用第二个方法。
//创建业务层对象
private LoginService loginService = new LoginService();
/// <summary>
///登录(记住密码)
/// </summary>
/// <param name="login"></param>
/// <returns></returns>
public JsonResult Login(Login login)
{
Operate operate = new Operate();
Expression<Func<Login, bool>> pwdname = a => a.UserName.Equals(login.UserName) && a.UserPass.Equals(login.UserPass);
operate.Success = loginService.QueryExists(pwdname);
if (operate.Success)
{
UserContext.User.UserInfo = login;
//创建cookie对象
HttpCookie cookie = new HttpCookie("LoginName");
cookie.Values.Add("username", login.UserName);
cookie.Values.Add("time", DateTime.Now.AddDays(7).ToString("yyyy-MM-dd HH:mm:ss"));
//设置过期时间
cookie.Expires = DateTime.Now.AddDays(7);
//添加到
System.Web.HttpContext.Current.Response.Cookies.Add(cookie);
}
return Json(operate);
}
/// <summary>
///登录(不记住密码)
/// </summary>
/// <param name="login"></param>
/// <returns></returns>
public JsonResult Logins(Login login)
{
Operate operate = new Operate();
Expression<Func<Login, bool>> pwdname = a => a.UserName.Equals(login.UserName) && a.UserPass.Equals(login.UserPass);
operate.Success = loginService.QueryExists(pwdname);
return Json(operate);
}
2.
然后在HomeController控制器里的Index方法写如下代码:
public ActionResult Index()
{
HttpCookie cookie = System.Web.HttpContext.Current.Request.Cookies.Get("LoginName");
if (cookie != null)
{
if (cookie.Values.Get("username") != null && cookie.Values.Get("time") != null)
{
string username = cookie.Values.Get("username");
DateTime dateTime = DateTime.Parse(cookie.Values.Get("time"));
if (DateTime.Now < dateTime)
{
ViewBag.username = username;
}
}
}
return View();
}
3.
实现列表和增删改:
///创建业务层对象
private FunctionService functionService = new FunctionService();
/// <summary>
/// 添加功能
/// </summary>
/// <param name="function"></param>
/// <returns></returns>
public JsonResult AddFunction(Functon function)
{
Operate operateResult = new Operate();
operateResult.Success = functionService.Add(function);
return Json(operateResult);
}
///列表
public JsonResult PageFunction(int page, int limit)
{
PageListResult<Functon> pageList = new PageListResult<Functon>();
pageList.code = 0;
pageList.msg = string.Empty;
int count = 0;
List<Functon> loginInfos = new List<Functon>();
Expression<Func<Functon, bool>> whereLambda = a => a.Id != 0;
Expression<Func<Functon, int>> orderbyLambda = c => c.Id;
pageList.data = functionService.QueryPageList(page, limit, whereLambda, orderbyLambda, out count);
pageList.count = count;
return Json(pageList, JsonRequestBehavior.AllowGet);
}
/// <summary>
/// 判断功能名是否存在
/// </summary>
/// <param name="function"></param>
/// <param name="name"></param>
/// <returns></returns>
public JsonResult IsFunction(Functon function, string name)
{
Operate operateResult = new Operate();
Expression<Func<Functon, bool>> lambdaExpression = a => a.Name == name;
operateResult.Success = functionService.QueryExists(lambdaExpression);
return Json(operateResult);
}
/// <summary>
/// 编辑
/// </summary>
/// <param name="function"></param>
/// <returns></returns>
public JsonResult UpdateFunction(Functon function, int id)
{
Operate operateResult = new Operate();
operateResult.Success = functionService.Update(function);
return Json(operateResult);
}
/// <summary>
/// 删除
/// </summary>
/// <param name="function"></param>
/// <returns></returns>
public JsonResult DelFunction(Functon function, int id)
{
Operate operateResult = new Operate();
operateResult.Success = functionService.Delete(function);
return Json(operateResult);
}
第六步:
1.在页面上实现登录和记住密码:
$(function () {
$("#login_btn").click(function () {
var data = {};
//登录名
data.UserName = $("#username").val();
//登录密码
data.UserPass = $("#userpwd").val();
//是否记住密码
if ($("#savepwd").prop("checked")) {
$.ajax({
url: "/Login/Login",
type: "post",
data: data,
success: function (result) {
if (result.Success) {
alert("登陆成功!");
//登录成功则跳转主页
location.href = "/Home/Index";
layer.close(index);
}
else {
alert("登陆失败!");
}
}
});
} else {
$.ajax({
url: "/Login/Logins",
type: "post",
data: data,
success: function (result) {
if (result.Success) {
alert("登陆成功!");
//登录成功则跳转主页
location.href = "/Home/Index";
layer.close(index);
}
else {
alert("登陆失败!");
}
}
});
}
})
})
2.实现列表和增删改:
<table class="layui-hide" id="test" lay-filter="demo"></table>
<script src="~/layui/layui.js" charset="utf-8"></script>
<script>
layui.use('table', function () {
var table = layui.table;
table.render({
elem: '#test'
, url: '/Login/PageFunction'
, cellMinWidth: 80 //全局定义常规单元格的最小宽度,layui 2.2.1 新增
, cols: [[
{ type: 'checkbox' }
, { field: 'Id', title: 'ID', width: 100, fixed: 'left', sort: true }
, { field: 'MenuId', title: '菜单Id', width: 120 }
, { field: 'Name', title: '功能名称', width: 120 }
, { field: 'ControllerName', title: '控制器名称', width: 150 }
, { field: 'ActionName', title: '方法名称', width: 150 }
, { field: 'FunctionCode', title: '功能编码', width: 150 }
, { field: 'Remark', title: '备注', width: 150 }
, { fixed: 'right', title: '操作', toolbar: '#barDemo', width: 150 }
]]
, page: true
});
//监听行工具事件
table.on('tool(demo)', function (obj) {
var data = obj.data;
//console.log(obj)
if (obj.event === 'del') {
var id = data.Id;
$.ajax({
type: "post",
url: "/Login/DelFunction?id=" + id,
success: function (result) {
if (result.Success) {
layer.msg('删除成功!', { icon: 6, time: 1000 });
obj.del();
layer.close(index);
} else {
layer.msg('删除失败!', { icon: 6, time: 1000 });
}
}
});
} else if (obj.event === 'edit') {
layer.open({
type: 1,
title: '编辑功能',
area: ['700px', ''],
shadeClose: false,
content: $('#update_administrator_style'),
});
$("#Menu").val(data.MenuId);
$("#Name").val(data.Name);
$("#Contro").val(data.ControllerName);
$("#Action").val(data.ActionName);
$("#Code").val(data.FunctionCode);
$("#Remark").val(data.Remark);
$("#btn").click(function () {
var data2 = {};
data2.MenuId = $("#Menu").val();
data2.Name = $("#Name").val();
data2.ControllerName = $("#Contro").val();
data2.ActionName = $("#Action").val();
data2.FunctionCode = $("#Code").val();
data2.Remark = $("#Remark").val();
var id = data.Id;
$.ajax({
type: "post",
url: "/Login/UpdateFunction?id=" + id,
data:data2,
success: function (operateResult) {
if (operateResult.Success) {
layer.msg('编辑成功!', { icon: 6, time: 1000 });
location.reload();//刷新页面
} else {
layer.msg('编辑失败!', { icon: 6, time: 1000 });
}
}
})
})
}
});
});
</script>
<script type="text/html" id="barDemo">
<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
</script>
//添加功能
$("#Submit").click(function () {
var data = {};
data.MenuId = $("#menu").val();
data.Name = $("#name").val();
data.ControllerName = $("#contro").val();
data.ActionName = $("#action").val();
data.FunctionCode = $("#code").val();
data.Remark = $("#remark").val();
var name = data.Name;
$.ajax({
type: "post",
url: "/Login/IsFunction?name="+name,
data: data,
success: function (result) {
if (result.Success) {
layer.msg('此用户已存在,不能添加!', { icon: 6, time: 1000 });
} else {
$.ajax({
type: "post",
url: "/Login/AddFunction",
data: data,
success: function (result) {
if (result.Success) {
layer.msg('添加成功!', { icon: 6, time: 1000 });
location.reload();//刷新页面
} else {
layer.msg('添加失败!', { icon: 6, time: 1000 });
}
}
})
}
}
})
})