2017-04-05 61 views
0

我使用server.execute來隱藏URL中的查詢字符串,但我發現另一個問題,當我在頁面1中並單擊一個按鈕將頁面傳輸到頁面2,頁面1的內容仍然顯示在頁面2的內容頁面中。兩頁都顯示給我。我該如何解決這個問題?Server.Execute()在當前頁面打開新頁面

我的代碼示例。在頁面1中,有一個按鈕,我在點擊事件中添加了這段代碼。

protected void Button1_Click(object sender, EventArgs e) 
{ 
    Server.Execute("Page2.aspx?Name=john"); 
} 

在頁面2中,有一個文本框用於讀取查詢字符串值。

TextBox1.Text = Request.QueryString["Name"].ToString(); 

我在查詢字符串中發送多個值,但這只是一個示例。然而,頁面1和頁面2的內容都顯示在一個頁面中,點擊應該轉移到第2頁的按鈕。

+0

該服務器獲取你的價值觀。執行是爲了使用StringWriter將url輸出到字符串,你想要做什麼。 – Anil

回答

0

由於server.execute將控制權轉移回原始頁並繼續執行,因此您將看到兩頁的輸出。爲了轉移請求完全使用Server.TransferRequest

Page1.aspx的:添加查詢字符串值NameValueCollection

  NameValueCollection nv = new NameValueCollection(); 
      nv.Add("Name","john"); 
      Server.TransferRequest("Page2.aspx",true,"GET", nv); 

Page2.aspx:從Request.Header

  TextBox1.Text = Request.Headers.Get("Name"); 
+0

其實我更喜歡使用Server.Execute()來防止這裏聲明的錯誤。 https://support.microsoft.com/en-us/help/312629/prb-threadabortexception-occurs-if-you-use-response.end,-response.redirect,-or-server.transfer – user1947393

+0

我已更新我的回答,您應該將代碼添加到問題中,以更深入地調查您的需求。 – Anil

+0

我也更新了我的問題。 – user1947393

1

使用Server.Transfer代替Server.Execute。 查看此以瞭解差異。 Difference between both

當使用使用Server.Execute,一個URL傳遞給它作爲參數,並且控制轉移到這個新頁面。代碼的執行發生在新頁面上。一旦代碼執行完畢,控制權就會返回到初始頁面,就在它被調用的地方之後。但是,在Server.Transfer的情況下,它的工作原理非常相似,區別在於執行停止在新頁面本身(意味着控件不會返回到調用頁面)。 在這兩種情況下,瀏覽器中的URL仍然是第一頁的url(不刷新到新頁面的URL),因爲瀏覽器沒有被要求這樣做。

+0

其實我更喜歡使用Server.Execute()來防止這裏聲明的錯誤。 https://support.microsoft.com/en-us/help/312629/prb-threadabortexception-occurs-if-you-use-response.end,-response.redirect,-or-server.transfer – user1947393

+0

您可以指定一個將postbackurl屬性添加到按鈕並將其用於跨頁面發佈。檢查此鏈接:[鏈接](https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.button.postbackurl(v=vs.110).aspx) – Srikanth