ASP.NET MVC登陆后跳转到原页面

时间:2024-04-05 19:22:41

ASP.NET MVC登陆后跳转到原页面的方法

一、功能描述:

  1. 当打开一个web页面,该页面需要登陆时,跳转到登陆页面;
  2. 登陆页面验证成功之后,再自动跳转到将要打开的web页面;
  3. 图示:
    ASP.NET MVC登陆后跳转到原页面ASP.NET MVC登陆后跳转到原页面
    ASP.NET MVC登陆后跳转到原页面

二、解决方案

  1. 思路:
    1)、构造一个抽象过滤控制器,该控制器用于判断用户是否已登陆和登陆后跳转到原页面,所有需要登陆的页面均继承该控制器,
    该控制器跳转登陆页面时,会把原页面的地址值作为参数传入到登陆页面的地址中;
    2)、构造一个登陆控制器,该控制器登陆成功之后,获取地址值中的参数(原页面地址),根据该地址跳转回原页面;
    3)、项目结构预览:
    ASP.NET MVC登陆后跳转到原页面
  2. 实现方法
    1. 新建一个“登陆控制器(LoginController)”;代码见《附件一》;
      ASP.NET MVC登陆后跳转到原页面
      ASP.NET MVC登陆后跳转到原页面ASP.NET MVC登陆后跳转到原页面
    2. 新建一个“过滤控制器(FilterController)”;代码见《附件二》;
      ASP.NET MVC登陆后跳转到原页面
    3. 新建一个“HomeController”作为首页,其“View”加入跳转到“/Test/Index”页面的连接;
      ASP.NET MVC登陆后跳转到原页面
      ASP.NET MVC登陆后跳转到原页面
    4. 新建一个“TestController”,该控制器继承“FilterController”,其“View”加入一行文本;
      ASP.NET MVC登陆后跳转到原页面
      ASP.NET MVC登陆后跳转到原页面

三、附件

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
    }
}