2013-06-12 59 views
0

我想從我的代碼隱藏頁面打開一個新窗口,並出於某種奇怪的原因,它不按預期工作。從我已搜查,兩種常用的方法有:使用C#代碼隱藏打開新窗口

1. Using Response.Redirect 
2. Page.Client.RegisterStartupScript 

我有一個用於URL或文件名的字符串變量。爲了幫助您瞭解我在做什麼,我有人從網站下載資源。當他們點擊資源鏈接(它是一個文件或站點鏈接)時,我將它們帶到一個處理頁面,在那裏我看他們是否有權訪問文件並記錄他們訪問它。一旦完成,他們將被引導到網站或接收下載文件。

我使用字符串作爲名稱。我嘗試過的兩種方法是:

string sPageRedirect = 
    "<script type=\"text/javascript\" >window.open(' " + sFileName + "');</script>"; 

Page.ClientScript.RegisterStartupScript(this.GetType(), "Openwindow", String.Format(sPageRedirect),true); 

使用此方法時。我的過程頁面(trackdownload)只是坐在那裏,用空白的文件信息

Response.Redirect(sPageRedirect); 

當此方法用於我得到錯誤未找到文件。當我在看的URL,它似乎將其追加,所以我得到:

mysite/downloads/%3Cscript%20type=%22text/javascript%22%20%3Ewindow.open('%20http://mysite/myhelp/gotothis.htm');%3C/script%3E 

更新

首先,感謝你YK1,呸和科斯塔斯·CH。回答這個問題。這是我的第一篇文章,我想確保我先做功課並提供細節。我希望能夠回答問題!我一直玩這個,我想出了一個我認爲我會分享的替代解決方案。首先,正如你指出的那樣,爲了我想要做的事情,它不可能像我所希望的那樣完成。因爲當一個人點擊一個超鏈接來下載文件或者被定向到一個新頁面時,它將在新窗口中打開,同時仍然記錄下載,但是打開新窗口失敗。我的目標是記錄所有的幫助鏈接和下載的文件。所以文件處理工作就像以往一樣,我對此感到滿意。我所做的解決方案是基於Yuck的想法。所以我在做什麼是

如果鏈接是一個文件,我去我的跟蹤頁面,就像以前一樣。

如果鏈接是網頁鏈接,我修改了href以使用JS調用。基本上是Yuck建議的。在處理頁面上,我仍然在進行錄製,但我添加了讀取最後4個字符(即.htm)的邏輯,並且如果點擊的文件是該文件,跟蹤頁面將自動重定向到調用頁面。這樣,對於用戶來說,他們仍然在主要網站上,並且他們得到一個有他們的幫助文件的新窗口。我們可以做window.open的原因是他們接受過培訓,期望這些文件,所以我不應該與用戶有任何問題。

所以對我隱藏我這樣做

if (dsData.Tables[0].Rows[i]["filetype"].ToString().Trim() == ".html") 
            { 
             sClick = " onclick=\"openNew('" + ConfigurationManager.AppSettings["Domain"].ToString() + dsData.Tables[0].Rows[i]["fileandpath"].ToString().Trim() + "')\""; 
            } 
            cell.InnerHtml = "<a href=\"downloads\\tracker.aspx?File=" + dsData.Tables[0].Rows[i]["file"].ToString 
+ "\"" + sClick + ">" + dsData.Tables[0].Rows[i]["name"].ToString().Trim() + "</a>"; 

在我的網頁它有這個

function openNew(sLink) { 
      window.open(sLink); 
     } 
+0

Openwindow是您的一個JS文件中定義的JavaScript方法嗎? –

+0

'string.Format'似乎沒有做太多。 –

回答

1

在代碼中你不能做到這一點因爲它需要影響瀏覽器。你可以嘗試使用jQuery和ASP中的一些變量。NET:

<script type="text/javascript"> 

    $(function() { 
     window.open('<%: sFileName :>'); 
    }); 

</script> 

這將立即打開一個文件準備就緒的窗口。請注意,這將對您的用戶特別惱人,所以我不確定您想要使用它的位置或原因。您也可能會遇到彈出式窗口攔截器的麻煩。

0

嘗試使用

Page.ResolveUrl("~/Pages/sPageRedirect.aspx") 
0

在第一種情況下,您已明確提供了腳本塊,並且還將最後一個參數傳遞給了true。它改成這樣:

Page.ClientScript.RegisterStartupScript(this.GetType(), "Openwindow", sPageRedirect, false); 

第二種情況下,你不能重定向到的javascript :) 您重定向到一個地址:

Response.Redirect(sFileName); 

無論如何,是的,你將有彈出窗口攔截器的問題。自動彈出窗口是不可取的。