最近做一个项目,要求用户在查看未经许可的页面时自动跳转到登录页面,登录完成后自动跳转回原先的请求页面。
原先我用了ASP.NET2.0自带的login控件,在DestinationPageUrl属性中指定要跳转回去的页面,但如果用户可以从不同的页面发出请求就没有办法了。
在网上查了很多资料,大部分都是说用Session,但是Session会影响性能这是共识,所以能少用还是尽量少用。
经过一天的苦心钻研终于发现一个简单可行的办法,原先一门心思只想着在login控件的属性框里面设置DestinationPageUrl,它自然只能是一个静态值,为什么不能在程序中动态改变它呢。代码如下:
Source.aspx:    if (User.IsInRole("admin") == false)
    {
      Response.Redirect("Login.aspx?ReturnUrl=Source.aspx");// 转向Login.aspx登录页面之前,记录请求页面的url
    }
Login.aspx:    string url;
    protected void Page_Load(object sender, EventArgs e)
    {
        url = Request.Params["ReturnUrl"];   // 获取源页面的url
    }    protected void Login1_LoggedIn(object sender, EventArgs e)
    {
        Login1.DestinationPageUrl = url;     // 根据源页面的url,设置登录完成后的转向url
    }
通过ASP.NET2.0提供的Login控件可以方便的实现所需的登录相关的操作,请大家参考一下,有啥错误也请提出来哈