我的basepage类代码如下:public class BasePage : System.Web.UI.Page
    {
        int i = 0;
        public BasePage()
        {
            this.Load += new EventHandler(BasePage_Load);
        }        private void BasePage_Load(object sender, EventArgs e)
        {
            //string url = System.Web.HttpContext.Current.Request.Url.ToString();
            //验证用户是否登录            HttpCookie cookie = Common.Common.GetCookie();
            if (cookie == null)
            {
                Response.Write("<script language = javascript>window.parent.location.href='Login.aspx'</script>");
            }
        }这样在每个子页面再继承basepage之后,当发现没有cookie时会跳出框架(frameset)跳转到login.aspx页面,但是好像也要必须执行完子页面的page_load事件才行,有没有办法不执行完子页面的page_load事件就跳出框架并跳到login.aspx页面?谢谢。

解决方案 »

  1.   

    楼主分给我吧。
    在你的Page_load执行里面,建议在OnInit里面。判断你的登陆对象。如果为空照你的操作输出
    Response.Write("<script language = javascript>window.parent.location.href='Login.aspx'</script>");
    其实这一步还没有往客户端发送,只是往输出流写入内容。
    然后Context.ApplicationInstance.CompleteRequest();  //跳过所有的管线链中的事件。
    Response.Flush();  //向客户端发送你的输出流
    Response.End();//终止当前线程
      

  2.   

    protected void Page_PreInit(object sender, EventArgs e)
    {
        //这里写判断
    }
      

  3.   

    重写OnInit,加上你的判断和Response.End()。在Render事件之前处理就不会有其它输出。
      

  4.   

    在basepage类的Pre_Init方法中实现
      

  5.   

    只需要在PageBase中
    protected override void OnLoad(EventArgs e)
        {
    //判断登录
    base.OnLoad(e);
    }
    如此,即可。继承的子页面中仍然可以写相应的Page_Load
      

  6.   


    你这种方法还是会要执行完子页面的page_load方法才会跳到登录页面,是不是有点不对啊?
      

  7.   


    不写Context.ApplicationInstance.CompleteRequest();  //跳过所有的管线链中的事件。
    Response.Flush();  //向客户端发送你的输出流
    两行代码好像也会向客户端输出脚本。
      

  8.   


    Response.End()的作用就是终止当前访问的子页面(即继承basepage类的页面)不再执行下去了,即不再执行page_load事件了。
      

  9.   


    我说是Response.Flush();  //向客户端发送你的输出流
    这句代码+上句代码不需要,只需要Response.End()一句就行。
      

  10.   

    注意看源码。如果当前正在进行Flush操作,是需要跳过管线连事件的。