1、打开VS新建一个MVC项目,右键点击项目新建一个区域Admin作为后台部分
2、既然要做登录限制我们在App_Start下面新建一个类 继承Controller作为基处理控制器。
里面Session就是储存用户的登录信息,登陆过的用户跟没有登录的用户就是在这个里面判断,后面建的控制器都是继承这个BaseController,OnActionExecuted重写这个方法判断登录,下面是代码
using System.Security.Principal;
using System.Web.Mvc;
using System.Web.Mvc.Filters;
namespace WyMVCLigerUIDemo20180626
{
/// <summary>
/// 基处理控制器,不仅可以取代全局过滤器,还提供派生类方法
/// </summary>
public abstract class BaseController : Controller
{
// GET: Base
protected Model.UserInfo UserInfo => Session["UserInfo"] as Model.UserInfo;
/// <summary>
/// 数据库操作上下文
/// </summary>
protected ModelContext Context => ModelContext.Current;
/// <summary>
/// 判断是否登录 没有登录强跳转登录界面
/// </summary>
/// <param name="filterContext"></param>
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
if (UserInfo == null && filterContext.ActionDescriptor.ActionName.ToLower()!="login")
{
filterContext.HttpContext.Response.Redirect("/Admin/Home/Login",true);
}
base.OnActionExecuted(filterContext);
}
}
}
下面是UserInfo类就是一个ID、用户名、密码
using Qwit.ORM;
namespace WyMVCLigerUIDemo20180626.Model
{
/// <summary>
/// 管理员信息
/// </summary>
[Table("User")]
public class UserInfo:ITablesCreateCompleted
{
public int Id { get; set; }
public string Name { get; set; }
public string Pass { get; set; }
/// <summary>
///
/// </summary>
/// <param name="context"></param>
public void OnTablesCreated(EntityContext context)
{
//创建表的时候调用此方法,用于创建视图和默认数据
}
}
}
3、在区域Areas里面的Admin下的控制器Controller新建一个控制器Home。Home作为后台的首页,Login是登陆界面并添加相应的视图
下面是后台Home控制器中的代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using WyMVCLigerUIDemo20180626.Model;
namespace WyMVCLigerUIDemo20180626.Areas.Admin.Controllers
{
public class HomeController : BaseController
{
// GET: Admin/Home
public ActionResult Index()
{
return View();
}
// GET: Admin/Home
/// <summary>
/// 登录页面
/// </summary>
/// <returns></returns>
[AllowAnonymous]
public ActionResult Login()
{
string loginID = "admin";
string PasswordCon = "admin888";
Session["LoginName"] = loginID;
Session["Password"] = PasswordCon;
UserInfo userInfo = new UserInfo();
userInfo.Name = loginID;
userInfo.Pass = PasswordCon;
return View();
}
/// <summary>
/// 登陆逻辑
/// </summary>
/// <param name="name"></param>
/// <param name="pass"></param>
/// <returns></returns>
//[AllowAnonymous, HttpPost]
//public ActionResult Login(string name, string pass)
//{
// //eg:用户登录
// var user = Context.Users.Where(q => q.Name.Equals(name)).FirstOrDefault();
// //同 var user =Context.Users.FirstOrDefault(q => q.Name.Equals(name));
// //推荐采用异步操作,即
// //var user =await Context.Users.FirstOrDefaultAsync(q => q.Name.Equals(name));
// if (user != null)
// {
// if (user.Pass.Equals(pass))
// {
// //密码正确,登陆成功
// }
// }
// return Json(new Models.AjaxResult { Result = true });
//}
[HttpPost]
public ActionResult LoginTow()
{
string namelogin = Request["txtName"].ToString();
string pass = Request["txtPass"].ToString();
if (Session["LoginName"].ToString() == namelogin && Session["Password"].ToString() == pass)
{
var user = new UserInfo() { Name = namelogin, Pass = pass };
Session["UserInfo"] = user;
return Content("SU");
}
else
{
return Content("ER");
}
}
}
}
Login是对应的登录视图 里面设置的Session,登录的账号密码,这里是写死的没有链接数据库,怕写的多以后再补上,LoginTow这个是登陆方法 前台Ajax请求的地址,看得到返回的不是View是一些文本 登录成功失败都返回相应的字符。下面是登陆界面
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>管理员登录</title>
<link href="/resources/bootstrap/css/bootstrap.css" rel="stylesheet" type="text/css" />
<link href="/resources/dropkick/dropkick.css" rel="stylesheet" type="text/css" />
<link href="/resources/easyui/easyui.css" rel="stylesheet" type="t