程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> Response.Redirect在新窗口打開的另一種方法

Response.Redirect在新窗口打開的另一種方法

編輯:.NET實例教程
這裡是孟子提供的方法

這裡介紹Ihttpmodule處理請求管道的方法。Response.Redirect的原理是服務器設置返回http狀態碼為302,然後客戶端執行跳轉,用reflector可以看到.Net的代碼段。

以下是HttpResponse類的Redirect方法中的跳轉代碼



this.StatusCode = 0x12e; 
this.RedirectLocation = url;

所以,我們可以擴展Ihttpmodule來攔截http狀態碼,強制設為200,同時插入JS代碼段來實現新窗口打開。以下是Ihttpmodule的實現代碼



using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
namespace ClassLibrary2
...{
    public class Class1:System.Web.IHttpModule
    ...{
        public void Init(HttpApplication application)
        ...{

            application.PreSendRequestHeaders += new EventHandler(application_PreSendRequestHeaders);
        }

        void application_PreSendRequestHeaders(object sender, EventArgs e)
        ...{
         HttpApplication Application = (HttpApplication)sender;

            HttpContext context = Application.Context;

            if (context.Response.StatusCode == 302)
            ...{
                context.Response.Write("<script>window.open(''"+context.Response.RedirectLocation+"'')</script>");
                context.Response.StatusCode = 200;
            }

        }
 
        public  void Dispose()
        ...{
        }

        
    }
}

最後配置一下web.config就可以了



<?XML version="1.0"?>
<configuration>
    <system.web>
        <compilation debug="true"/>
        <authentication mode="Windows"/>
    <httpModules>
      <add name="MyModule" type="ClassLibrary2.Class1,ClassLibrary2"></add>
    </httpModules>
    </system.web>
</configuration>

另外一點,ms自坐主張的在跳轉之後,end之前插入了這麼一段代碼,我得b4他們一下,解決辦法,大家自己想想吧。



this.Write("<Html><head><title>Object moved</title></head><body> ");
        this.Write("<h2>Object moved to <a href="" + HttpUtility.HtmlAttributeEncode(url) + "">here</a>.</h2> ");
        this.Write("</body></Html> ");


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved