如何維護ASP.NET頁面發佈後備之間的對象?我有一個ASP.NET網頁。當我點擊一個asp.net按鈕時,我會調用我的函數(Save),它將創建我的自定義類(UserDetails類)的對象並將詳細信息保存到數據庫。所以這是一個回帖。回帖後,相同的頁面將顯示給用戶。那時候,我想把我在第一個函數(保存)中創建的用戶對象。做這個的最好方式是什麼 ?我知道我可以將它存儲在會話中並訪問它。但我想知道有沒有其他更好的方法?ASP.NET:我如何在回發之間維護對象?
9
A
回答
3
你正在尋找的方法是某種類型的數據綁定機制,結合對象的值(你可以從加載數據庫,如果它已經存在)到您的asp.net webform。
基本上你具備以下條件:
- 您顯示與領域爲對象的屬性,一個空的網頁表格(即文本框)
- 用戶將填寫的表格,按保存
- 然後回發將發生。在PageLoad上,您可以檢測這是否爲
Page.IsPostback
的回傳,如果是,則創建一個新對象並用用戶輸入的值填充它。 - 在您的按鈕的OnClick,你調用相應的BL方法儲存下來的DB
這看起來像(我寫出來我的頭沒有一個編譯器,所以要小心:))
public partial class MyPage : Page
{
private Person myPersonObj;
protected void Page_Load(...)
{
if(!Page.IsPostback)
{
//this is not a postback, so you may load an object based on an ID (i.e. in QueryString or create a new one
myPersonObj = new Person();
}
else
{
//it is a postback, so unbind the values
myPersonObj = new Person();
Unbind(); //the myPersonObj will be filled, the values are managed by ASP.net in the ViewState
}
}
//caution, overriding Page.DataBind()
private override void DataBind()
{
textBoxFirstname.Text = myPersonObj.FirstName;
...
}
private void Unbind()
{
myPersonObj.FirstName = textBoxFirstname.Text;
}
protected void btnSubmit_OnClick(...)
{
if(Page.IsValid)
{
Save();
}
}
private void Save()
{
//ideal layering with Interfaces
IPersonBL personBL = MyBLFactory.Get<IPersonBL>();
personBL.SavePerson(myPersonObj); //call the BL for further validation and then persisting
}
}
我想要的東西添加昨天,卻忘了,因爲我不得不趕快:
您可以將對象以及存儲在ViewState或會話爲他人所描述的,但我已經經歷了它應該由於以下「缺點」(從我的觀點來看)儘可能少:
- 你的對象必須是可序列化
- 在ViewState中存儲將drammatically增加你的頁面的大小,從而放慢您的網頁的加載速度。請注意,每次發生「回發」時,ViewState都會傳輸到客戶端並返回。如果這是唯一的可能性,你遇到性能問題,你可能會考慮trying this(但這應該是例外!!)
- 在會話中存儲對象可能會把負載放在服務器端,消耗那裏的內存。如果你知道你不再需要它們,你應該小心地將對象存儲在會話中,並且可能還要關心那些對象的銷燬。
我描述的「數據綁定」方法的優點是,您沒有這些問題,每次都有一個新的新對象的「缺點」。因此,您必須注意處理您的對象狀態,即手動保持id通過往返等。
3
您可以將對象存儲在ViewState中,這將是頁面特定的存儲。該對象將被序列化並注入頁面視圖狀態,這將使頁面更大。
通過在會話中存儲對象,您可以保持頁面更小但消耗服務器內存資源。
或者,您可以每次從數據庫中讀取對象。這將具有顯示數據庫中保存的內容的優點。
7
另一種選擇是使用唯一密鑰(例如「user」+ id)將對象存儲在緩存中,並且只將其存儲在當前會話中或ViewState中。在回發期間,您可以從緩存中檢索對象。
有了這個方法,你有幾個優點:
- 你在你的會話或在ViewState
- 如果回發是由具有較少的數據,你只需要訪問數據庫,如果對象是無在緩存
- 如果沒有回發製成,對象最終會從緩存中刪除較長(釋放內存)
-1
在UI執行此
UserDetail userDetail = new UserDetail();
//do your stuff
userDetail = UserBL.TransferUserData(userDetail);
//do your stuff
在BL
public static UserDetail TransferUserData(UserDetail userDetail)
{
// do your processing on userDetail
return UserDAL.TransferUserData(userDetail);
}
在DAL
public static UserDetail TransferUserData(UserDetail userDetail)
{
//do your processing of db
return userDetail;
}
相關問題
- 1. 如何在回發之間維護對象?
- 2. Asp.net Mvc - Kigg:在請求之間維護HttpContext.Items中的用戶對象
- 3. 在回發之間維護選定的選項卡
- 4. 在Python中維護對象之間的關係
- 5. 維護對象之間的一對一映射
- 6. 我應該如何在Perl中維護我的對象模塊?
- 7. Java Servlets之間如何維護狀態?
- 8. 如何在Objective-C中的對象實例之間維護數據?
- 9. 有人可以幫我嗎?在不同的函數之間維護Python對象
- 10. 長時間維護.NET OdbcConnection對象
- 11. OO:維護相關對象之間一致性的好方法
- 12. 哪些對象負責維護聚合之間的引用?
- 13. 你如何維護開發團隊之間的技術合同?
- 14. 如何維護序列化對象?
- 15. 我如何維護活動加載之間的ListView狀態android
- 16. JQGrid維護數據回發
- 17. 在RenderAction調用之間維護ViewData
- 18. 在https和http之間維護私鑰
- 19. 如何在asp.net中維護PlaceHolder的ViewState
- 20. 如何在asp.net中維護jqxGrid的viewstate?
- 21. 爪哇 - 維護對象
- 22. 維護php對象狀態
- 23. ASP.Net會話在回發之間清除?
- 24. 即使在回發之後仍然維護標籤順序
- 25. jQuery Slider在回發中維護價值
- 26. 在回發後維護數據
- 27. 如何維護SSRS中表和表頭之間的空間?
- 28. 如何在Mercurial中維護客戶之間的多種開發流程?
- 29. 如何在asp中維護兩個Url之間的會話。淨
- 30. 在會話之間維護對客戶端文件的引用