2011-01-25 54 views
0

我被困在一個條件下,我需要分享頁面之間的值。我想通過很少或沒有javascript來分享Codebehind的價值。我在這裏已經有一個問題,但使用JS。仍然沒有得到任何結果,所以我問的另一種方法。我可以通過querystring傳遞.net對象嗎?

所以我想知道我可以傳遞查詢字符串中的任何.net對象。所以我可以方便地在另一端解開它。

更新

或者是有任何JavaScript的方法,通過將其傳遞到Windows模態對話框。或類似的東西。

我在做什麼

我在做什麼是我的父頁面加載。我從我的類中提取具有從db中獲取的值的屬性。並把它放在Session["mySession"]。有些事情是這樣的。

Session["mySession"] = myClass.myStatus which is List<int>; 

現在在我的事件中,複選框單擊來自客戶端的事件,我打開一個彈出窗口。並在其頁面加載時,提取列表並填充子頁面上的複選框列表。

現在,從這裏用戶可以修改其選擇並關閉此頁面。關閉是通過一個名爲save的按鈕來完成的,在這個按鈕上迭代選中的項目,然後再次在Session [「mySession」]中發送它。

但問題是在這裏,當我再次點擊單選按鈕來查看更新後的值時,它會顯示前一個。也就是說,如果我的名單的總數是3從數據庫中,並修改後爲1重啓仍然顯示後3而不是1

+0

對象有多複雜? – ChaosPandion

+0

我需要通過列表

回答

3

我會這樣這樣的事情。

var stringNumbers = intNumbers.Select(i => i.ToString()).ToArray(); 
var qsValue = string.Join(",", stringNumbers); 

Request.Redirect("Page.aspx?numbers=" + sqValue); 

請記住,如果有太多的數字查詢字符串是不是最好的選擇。還要記住,任何人都可以看到查詢字符串,所以如果這個數據需要安全,不要使用查詢字符串。請記住其他海報的建議。

注意

如果您正在使用。NET 4,你可以簡化上面的代碼:

var qsValue = string.Join(",", intNumbers); 
+0

+1擊敗了我。精彩的解決方案 – naveen

+0

謝謝,同樣的解決方案反映在我的腦海裏。但是由於侷限,我避開了。由於我的名單將有最多5-10個值,所以我認爲它會起作用。 –

4

是的,你可以,但你必須序列化值,使它可以被編碼爲一個字符串。我認爲一個更好的方法是put the object in session而不是URL。

+0

我採取了會議的方法,但它對我來說變得邪惡。會話值沒有正確更新,每次我收到舊值時,我都會用新的值更新現有會話。 –

+0

如果使用得當,會話是件好事。如果您遇到錯誤,請詳細說明,我們會幫助您解決問題。在查詢字符串上傳遞這樣的東西更加邪惡。 –

+0

會議有更多的用途,但大多數時候我儘量避免他們像瘟疫。從最終用戶的角度來看,讓會話時間結束並失去工作是一個可怕的經歷。 –

0

使對象可序列化並將其存儲在進程外會話中。

您的Web應用程序中的所有頁面都可以訪問該對象。

0
+0

我一直在琢磨這個限制一段時間。例如,如果Web應用程序和服務之間正在進行請求(不涉及瀏覽器),那麼它甚至是重要的嗎? – Sinaesthetic

+0

@Sinaesthetic,我會檢查IIS/Apache /其他文檔,限制可能在服務器級別。 – Fredou

+0

。只是爲了信息,這是我發現:http://www.boutell.com/newfaq/misc/urllength.html – Sinaesthetic

-1

我可能會使用cookie來存儲對象。

+0

如果用戶禁用cookie,該怎麼辦??????? –

+0

根據您的應用程序,如果它可以,您可以打印一條錯誤消息。你不能做太多的禁用cookies,也不能獲得你最喜歡的電子郵件! – rakkc

相關問題