如何在PostBack上堅持ASP.Net類?我已經花時間去數據庫,並且在頁面最初加載時用值填充對象,那麼如何在PostBack上以優雅的方式保存這個對象呢?包含自定義對象的頁面會自動發回。如何在ASP.NET 3.5 Web Forms項目中持久化PostBack上的類?
什麼是值得我在ASP.NET 3.5 Web窗體應用程序中使用C#。
如何在PostBack上堅持ASP.Net類?我已經花時間去數據庫,並且在頁面最初加載時用值填充對象,那麼如何在PostBack上以優雅的方式保存這個對象呢?包含自定義對象的頁面會自動發回。如何在ASP.NET 3.5 Web Forms項目中持久化PostBack上的類?
什麼是值得我在ASP.NET 3.5 Web窗體應用程序中使用C#。
3.5可能有更好的方法,但在2.0中可以使用viewstate。只需將該對象添加到視圖狀態,並將其作爲隱藏字段自動包含在默認的asp.net表單中。然後在回發中,您可以從視圖狀態中檢索它。
雖然要小心,但您的視圖狀態包含在每頁加載。最終,我會建議從數據庫中再次獲取對象並避免查看狀態。你也可以嘗試類似於memcached來緩存對象服務器端。
protected void Page_Load(object sender, EventArgs e)
{
if(ViewState["NameOfUser"] != null)
NameLabel.Text = ViewState["NameOfUser"].ToString();
else
NameLabel.Text = "Not set yet...";
}
protected void SubmitForm_Click(object sender, EventArgs e)
{
ViewState["NameOfUser"] = NameField.Text;
NameLabel.Text = NameField.Text;
}
你可以使用一個會話變量或服務器緩存。視圖狀態的一個限制是對象必須被序列化以存儲它,但會話和服務器緩存可以存儲任何對象。
會話可能需要將對象序列化,具體取決於會話存儲的設置方式。 – 2010-04-15 18:48:28
如果物體很小,您可以考慮將其保持爲hidden field(s)。這樣你就不必佔用服務器內存,但是你也避免再次訪問數據庫。
有沒有機會在另一個會話中的所有對象數據可以被另一個用戶更改? – R0MANARMY 2010-04-15 15:15:47