2011-03-28 66 views

回答

6

具體而言,您正在討論的是在頁面之間傳輸狀態的方法。這可以通過幾種方式完成:

  1. 查詢字符串參數。這相當於您在帖子中完成的操作。
  2. 會議。在這種情況下,您將在一個頁面上填充一個Session變量,然後在另一個頁面上檢索它。
  3. 餅乾。
  4. 表單變量,如果您直接發佈有問題的頁面。
+0

Viewstate用於回傳到相同的表單。我不相信這將是一個持續價值到另一個頁面的選項。會議將是這兩者的正確選擇。 – nycdan 2011-03-28 18:30:00

+0

@nycdan - 如果直接發佈到目標表單而不是使用默認回發行爲,則可以使用ViewState。 – Thomas 2011-03-28 18:32:40

+0

正在使用string.Format()手動創建URL是否正確地執行此操作? – DaliH 2011-03-28 18:34:06

2

有幾種不同的方法可以讓信息跨多個頁面發送。

  1. 查詢字符串參數。 (如您的例子)
  2. Session變量
  3. 餅乾
  4. 表單變量(發佈到不同的頁面時)

這真的取決於你使用哪一個。

查詢字符串通常很容易,我使用那些當着陸頁是唯一需要數據的東西。

會話要求您有一個會話提供者的定義,並作出一些關於,正在進行的過程中的決策等。此外,這將保持數據,直到任何一個會話到期或您明確地清除它。

餅乾是好的,牢記所有的餅乾可以由客戶端查看。

跨表單提交表單變量可能是最稀有的一個,並配有它自己的注意事項,以確保.NET接受這一點。

3

請參閱How to: Pass Values Between ASP.NET Web Pages

另外,如果您正在執行Server.Transfer而不是Response.Redirect,則還可以使用HttpContext.Current.Items集合傳遞數據。

而且,代碼片段:

  • 只是執行字符串連接,所以你並不需要調用的String.format。

  • 是否應以UrlEncode查詢字符串參數

例如

Response.Redirect("name.aspx?sb=" + Server.UrlEncode(bts) 
    + "&del=" + Server.UrlEncode(delimiter)); 
0

如果鏈接依賴於信息,你知道頁面加載,而不是回傳時由用戶輸入的信息,我將生成的鏈接前期。

MyHyperlink.NavigateUrl = "name.aspx?sb="+bts+"&del="+delimiter; 

這樣,客戶端不必往返服務器以瞭解要重定向到的地址。

0

正如@Thomas所說,有很多方法可以做你正在問的東西。

  1. 查詢字符串參數:簡單,應儘可能使用。您可以打開多個選項卡/瀏覽器而不會相互影響。

  2. Session。這看起來很簡單,但是當您有可能打開多個選項卡時,它會下降,因爲您只有一個會話對象。我看到應用程序損壞的數據:打開選項卡,將對象加載到會話中。打開第二個選項卡,第二個對象替換會話中的第一個對象。返回到第1個選項卡,進行更改,單擊save:boom,第2個對象獲取第1個屬性。

  3. 我想不出有什麼理由永遠使用這個 - 會話的所有限制,沒有任何好處。

  4. 表單變量:您可以發佈到不同的頁面,並且存在您希望使用它的情況,但通常這會增加不需要的複雜性,特別是在asp.net中 - viewstate,等可能會導致問題。

0

我添加了另一個答案,因爲這裏可能每個人都錯過了你真正的問題。

如果真正的問題是:什麼是組裝的查詢字符串參數字符串的最佳方式,那麼你應該使用:

Response.Redirect(String.Format("name.aspx?sb={0}&del={1}", bts, delimiter)); 

這可以讓你有自己構建的字符串格式方法注入參數在定義的位置。

相關問題