我现在想实现一个效果,如果Session里面有值,就继续访问页面,如果没有就跳转到相应的页面处理Session。我的HttpHandlers处理类的代码如下:public class Handlers : IHttpHandler, IRequiresSessionState
    {
        #region IHttpHandler 成员        public bool IsReusable
        {
            get { return true; }
        }        public void ProcessRequest(HttpContext context)
        {
            //context.Response.Write("Hello Word!");
            //context.Response.End();
            if (context.Session["userBean"] == null)
            {
                context.Response.Redirect("../SessionHandler.aspx");
                context.Response.End();
            }
        }
        #endregion
    }
我现在遇到的问题是:如果Session没有值,跳转正常,并且跳转的页面的内容照常显示;如果有了Session值也跳转正常,但是跳转以后的页面的内容就不显示,跳转以后的页面一片空白。
我刚回顾这些基础,一下想不起来问题处在那,希望大家帮帮忙。

解决方案 »

  1.   

    http://topic.csdn.net/t/20021226/11/1301070.html
      

  2.   

    context.Response.Redirect("../SessionHandler.aspx",true);
      

  3.   


    您没看懂我的意思,我是说如果Session存在值,跳转才出的问题,谢谢!
      

  4.   

    你确定Session值有值时,执行了这段代码?
    if (context.Session["userBean"] == null)
                {
                    context.Response.Redirect("../SessionHandler.aspx");//此处加断点试试
                    context.Response.End();
                }
    另外看看是否有重复提交?
      

  5.   

    使用IHttpHandler会代替页面默认请求的HttpHandler--System.Web.UI.Page
    所有你写在Page内的东西无法呈现出来所以如果是aspx页的除特别需要外不要重新实现IHttpHandler接口你的要求解决方法:重写一个Page类继承System.Web.UI.Page:如public class BasePage : System.Web.UI.Page
    {
        protected override void OnLoad(System.EventArgs e)
        {
            //here write your program
            base.OnLoad(e);
        }
    }页面的CS 继承System.Web.UI.Page改为 BasePage
      

  6.   

    在global.asax.cs里的Application_BeginRequest事件里放你的判断代码
      

  7.   


    您这么说我已经有点映像了,但是现在是我的HTM页面也是那,跳转以后里面的内容也不显示?
      

  8.   


    您好,您没有看懂我的问题,我只想搞懂利用HttpHandlers做判断以后页面为什么不能出现内容? 谢谢!
      

  9.   


    我不是想问判断的问题,而是想问为什么利用HttpHandlers处理以后内容不显示,ASPX页面不显示,HTML页面也不显示!
      

  10.   


            public void ProcessRequest(HttpContext context)
            {
                context.Response.WriteFile(context.Server.MapPath(context.Request.Url.LocalPath));//把文件内容输出来,html符合要求
                context.Response.End();
            }
      

  11.   

    7#已经给答案了.可以用IHttpModule代替
      

  12.   

    把你调用handler页面和设置session的代码贴上来看看。
      

  13.   

    using   System; 
    using   System.Web;   
    namespace   MyModule 

    public   class   MyModule   :   IHttpModule   

    public   void   Init(HttpApplication   application)   
    {   
    application.   AcquireRequestState   +=   (new   
    EventHandler(this.Application_AcquireRequestState)); 

    private   void   Application_AcquireRequestState   (Object   source,   
    EventArgs   e)   

    HttpApplication   Application   =   (HttpApplication)source; 
    string   url=Application.Context.Request.Path;   
    if(Application.Context.Sesseion[ "User "] ==null)
    Application.Context.Server.Transfer( "ErrorPage.aspx ");   } 
    public   void   Dispose()   




    或使用BasePage
      

  14.   

    各位朋友,我现在只是想明白,利用HttpHandlers处理以后,为什么页面的内容没有了,的确,7#已经给出了答案,我不结贴的原因是因为我的静态页面并没有继承Page类,但是里面的内容也没有显示?如果分不够不可以加,我只想搞懂这个问题,谢谢大家!
      

  15.   

    你IIS上主目录-->配置里应该是配置了.html执行aspnet_isapi.dll,如果配置了取消掉
      

  16.   

    在.net 中aspx页面后台代码经常能看到Response.×××(), 有时候也能看到HttpContext.Current.Response.×××(),这两者有什么区别呢?其实,据我了解,差不多:Response.×××(), Response是Page 类定义的属性,用于获取与该 Page 对象关联的 HttpResponse 对象。该对象使您得以将 HTTP 响应数据发送到客户端,并包含有关该响应的信息。HttpContext.Current.Response.×××()为当前 HTTP 响应获取 HttpResponse 对象。其中Current为HttpContext的一个属性,能够返回HttpContext对象。一般来说,如果页面继承Page类,就用第一种,否则用第二种,不然的话就要new 一个page对象了
    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lijunchen1007/archive/2009/06/22/4288140.aspx
      

  17.   

       public void OnError(object obj, EventArgs args)
            {
               // closeWindow();
                HttpContext ctx = HttpContext.Current;
                HttpResponse response = ctx.Response;
                HttpRequest request = ctx.Request;            Exception exception = ctx.Server.GetLastError();          //  string errorInfo = "应用程序发生错误!<br/>1,来源地址:" + ctx.Request.Url.ToString() + "<br/>2,错误信息:" + exception.InnerException.Message;
                string errorInfo = "<table><tr><td>1</td></tr><tr><td>2</td></tr><tr><td style='width: 23px; color: red'>ErrorInfo</td></tr></table>";
                response.Write(errorInfo);            ctx.Server.ClearError();
            }
      

  18.   

    单独定义一个类 实现 IHttpModule 接口,用来处理 Session,然后将处理后的Session 再传给 Handler 去处理
    这样OK?