2010-06-17 60 views
3

我在ASP.Net中有一個VB代碼隱藏的web應用程序。我需要一個List變量,我聲明只要該人在頁面上就可以持久化,但是當前任何時候一個控件發回代碼,所有內容都會被清除。我對ASP.net完全陌生,所以我不知道這是否可能。可以用Session變量完成嗎?那些似乎只限於基本類型,但我可能是錯的。有沒有辦法阻止ASP.Net webapp清除VB端的頁面變量?

回答

2

使用ASP.Net它會在每次頁面加載時創建Code Behind類的新實例,這就是爲什麼您的類級變量正在被重置。

你最好的選擇可能是將你想要保留的列表存儲在會話中。如果它使事情變得更容易,您可以爲從會話變量中讀取數據的列表創建一個getter。在C#中,它看起來像:

private List MyList 
{ 
    get { return Session["ListKey"] as List; } 
    set { Session["ListKey"] = value; } 
} 
+0

他使用VB :) – 2010-06-17 16:54:04

+0

我只是聲明一個列表並將它保存到會話中,例如:'Session(「ListOfStuff」)= codeBehindList'? – 2010-06-17 16:54:10

+0

@Francisco:謝謝,但我可以設法從C#翻譯爲VB :) – 2010-06-17 16:56:09

3

調查ASP.NET ViewState。如果你使用它,你也應該知道很多問題,包括頁面大小膨脹和性能問題。 C#代碼(SRY我不擅長VB)是:

List<int> MyList 
{ 
    get { return (List<int>) ViewState["mylist"]; } 
    set { ViewState["mylist"] = value; } 
} 

注:不要忘了初始化這個變量。

關於使用會話狀態的注意事項:如果用戶同時打開2個或更多窗口,則這不起作用。

+0

嘿,忘了查看狀態...去顯示我很喜歡它:)。可能是更好的選擇壽。 – ckramer 2010-06-17 16:53:32

+0

我想我聽起來很新,但我在這,這很好。爲什麼viewstate會在頁面變慢時成爲更好的選擇? – 2010-06-17 16:59:35

+0

@Chapso - 這不是一個可怕的選擇。例如,如果您要在整數上存儲一個小號碼的列表,則很可能是OK。如果您要存儲數千個整數,您可能需要查看別處。 – Keltex 2010-06-17 17:01:36

1

如果您想要保存只在該特定頁面中需要的變量,而不是其他頁面中的變量,則假設您有多頁Web應用程序,則可以使用頁面ViewState保存要從請求中保留的變量請求。

如果你需要你的變量在不同的頁面之間持續存在,你可以使用Session來保存它。

現在,當你使用你的ViewState時,你必須考慮到如果你在那裏存儲大對象,或者在你的頁面中有許多控件,一個巨大的字符串(編碼視圖狀態)在回發之間來回移動,增加了負載時間和執行時間。

0

這是我最終使用的代碼。

Private Property ChangedControls() As List(Of Control) 
    Get 
     Return DirectCast(Session("changedControls"), List(Of Control)) 
    End Get 
    Set(ByVal value As List(Of Control)) 
     Session("changedControls") = value 
    End Set 
End Property 

在頁面加載時指定一個新列表工作得很好。

相關問題