2012-02-23 60 views
-1

點擊它時會出現一個按鈕,它會發出將用戶重定向到google.com的Javascript。因爲我不想這個重定向在歷史中生成一個項目,我使用window.location.replace但它生成歷史項目。window.location.replace在ASP.Net代碼中使用時生成歷史記錄

protected void btn1_Click(object sender, EventArgs e) 
    { 
     string url = "window.location.replace('http://google.com');"; 
     Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Redirect", url, true); 
    } 

任何一個有任何想法如何對付它。

+1

如果連產生的歷史有什麼不對? – Ved 2012-02-23 13:25:05

+0

這是使用location.replace代替location.href – kazim 2012-02-23 13:27:23

回答

0

我不知道,但你可以試試這個:

var len = history.length; 
history.go(-len); 
window.location.href = 'http://google.com'; 
+0

都能跟得上沒有工作的原因。但是,謝謝。 – kazim 2012-02-23 13:41:41

0

你爲什麼要使用服務器端事件處理程序,以獲取JavaScript?這可能是你的問題的原因。

ASP.Net的工作方式是,當您使用OnClick處理程序(您發佈的代碼)單擊<asp:button />之一時,瀏覽器會將整個form回傳給服務器以瞭解要執行的操作。這是一個新的歷史事件。因此,您的日誌中將有兩個歷史記錄條目。我猜這個頁面會使用JavaScript返回一個新版本的頁面,然後運行,重定向客戶端,只替換新的歷史事件,而不是舊的。這就是爲什麼你在歷史中獲得一些東西。

解決這個問題的方法是簡單地不使用服務器端的事件,一個ASP.Net按鈕來做到這一點。只需使用JavaScript。發回服務器以獲取本來可以在初始請求中提供的javascript是毫無意義的。作爲一個很好的經驗法則,任何時候當你發現自己在C#代碼中做了任何與JavaScript相關的事情時,它幾乎總是會是錯誤的做法。

1

如果你不是在回調中,那麼你可以嘗試:

protected void btn1_Click(object sender, EventArgs e) 
{ 
    HttpContext.Current.Response.Write("<html><head><script type='text/javascript'>window.location.replace('http://google.com');</script>/</head></html>"); 
    HttpContext.Current.Response.End(); 
}