[英]How are class fields treated in an ASP.NET web form class?
考慮帶有相關代碼文件(aspx.cs)的Web窗體(aspx)。
例如,在代碼文件中,我們具有以下內容:
public partial class MyPage : System.Web.UI.Page {
int myint;
string mystring;
public void Page_Load(object sender, EventArgs e) {
...
if (!this.IsPostBack) {
this.myint = 2;
this.mystring = "Hello";
}
...
}
}
我可以期望每次將頁面發回時都具有兩個變量嗎? 我的意思是:頁面類字段是否保留為Web表單狀態的一部分?
謝謝
不,這些對象將被放置在Page-Lifecycle的末尾。 如果要在ViewState中保留它們,則必須將它們添加到其中 。
需要存儲在ViewState中的對象必須可序列化 。
在ViewState中存儲簡單數據類型
像ASP.NET中的大多數狀態管理類型一樣,視圖狀態依賴於詞典集合,其中每個項目都使用唯一的字符串名稱進行索引。 例如,考慮以下代碼:
ViewState["ViewStateVariableName"] = 1;
這會將值1(或者更確切地說是包含值1的整數)放入ViewState集合中,並為其提供描述性名稱ViewStateVariable。 如果當前沒有名稱為ViewStateVariable的項目,則會自動添加一個新項目。 如果已經有一個使用該名稱索引的項目,它將被替換。
您可以在頁面/控件中添加了viewstate變量的任何位置訪問此變量。 檢索值時,請使用鍵名。
int number = (int) ViewState["ViewStateVariable"];
您還需要將檢索到的值轉換為適當的數據類型。 這是因為ViewState集合將所有項目存儲為通用對象,這也使您可以靈活地在其中存儲任何類型的基本數據類型。 實際上,您甚至可以將自定義對象存儲在視圖狀態中。
以視圖狀態存儲對象
您可以像存儲數字和字符串類型一樣輕松地在視圖狀態下存儲自己的對象。 但是,要以視圖狀態存儲項目,ASP.NET必須能夠將其轉換為字節流,以便可以將其添加到頁面的隱藏輸入字段中。 此過程稱為序列化。 如果您的對象不是可序列化的(默認情況下不是),那么當您嘗試將它們置於視圖狀態時,您將收到一條錯誤消息。
不,他們不是。 他們沒有堅持要發表意見。
為了持久保存它們,您需要使它們成為將其值存儲在ViewState中的屬性,如下所示:
public string MyString
{
get { return (string) ViewState["MyString"];
set { ViewState["MyString"] = value; }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.