ASP.NET MVC登陆后跳转到原页面的方法
一、功能描述:
- 当打开一个web页面,该页面需要登陆时,跳转到登陆页面;
- 登陆页面验证成功之后,再自动跳转到将要打开的web页面;
- 图示:
二、解决方案
-
思路:
1)、构造一个抽象过滤控制器,该控制器用于判断用户是否已登陆和登陆后跳转到原页面,所有需要登陆的页面均继承该控制器,
该控制器跳转登陆页面时,会把原页面的地址值作为参数传入到登陆页面的地址中;
2)、构造一个登陆控制器,该控制器登陆成功之后,获取地址值中的参数(原页面地址),根据该地址跳转回原页面;
3)、项目结构预览:
-
实现方法
- 新建一个“登陆控制器(LoginController)”;代码见《附件一》;
- 新建一个“过滤控制器(FilterController)”;代码见《附件二》;
- 新建一个“HomeController”作为首页,其“View”加入跳转到“/Test/Index”页面的连接;
- 新建一个“TestController”,该控制器继承“FilterController”,其“View”加入一行文本;
三、附件
1、附件一 FilterController代码
using System.Web.Mvc;
namespace WebApplication1.Controllers
{
/// <summary>
/// 过滤控制器(用于验证页面自动跳转等)
/// </summary>
public abstract class FilterController : Controller
{
//// <summary>
/// 该方法将在其它方法之前首先执行
/// </summary>
/// <param name="filterContext"></param>
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
//若用户未登陆(已登录的用户信息保存在Session全局对象中)
if (Session[LoginController.LoginUserKey] == null)
{
//跳转到带有原页面地址作为地址参数的登陆页面
string path = filterContext.HttpContext.Request.Path;//原页面的地址
filterContext.Result = Redirect("/Login/Index?ReturnUrl=" + path);
}
}
}
}
2、附件二 LoginController代码
using System.Web.Mvc;
using WebApplication1.Models;
namespace WebApplication1.Controllers
{
public class LoginController : Controller
{
/// <summary>
/// 全局变量:用户在Session对象中的标识
/// </summary>
public static string LoginUserKey = "[email protected]";
// GET: Login
public ActionResult Index()
{
return View();
}
#region 【方法】【>>>--------->>【提交用户登陆信息】^_^【Submit()】<<---------<<<】
/// <summary>
/// 提交用户登陆信息
/// </summary>
/// <returns></returns>
public ActionResult Submit()
{
//获取用户在登陆页面中录入的登陆信息
string loginName = Request["loginCode"];
string password = Request["password"];
//根据登陆信息查询数据库中匹配的用户信息(注:这里直接新建一个)
SysUser user = new SysUser() { LoginCode = "test", Password = "test" };
//若查找失败,则退出
if (user == null) return View();
//若成功,则将该用户信息存储在浏览器的Session全局对象中
Session[LoginUserKey] = user;
//获取页面地址中的参数信息
string returnURL = Request.Params["HTTP_REFERER"];
int index = returnURL.IndexOf('=');
returnURL = returnURL.Substring(index + 1);
//若参数为空跳转到首页,否则调换到原页面
if (string.IsNullOrEmpty(returnURL))
return Redirect("/Home/Index");
else
return Redirect(returnURL);
//return Redirect(Request.QueryString["URL"]);
}
#endregion
}
}