2012-10-26 57 views
5

我正在編輯對象的「編輯」頁面。在這個頁面上,我希望有一個類似於DetailsView的東西,它允許編輯對象的屬性以及帶有子對象的GridView,並允許簡單地添加/編輯/刪除子對象。在單擊「保存」按鈕之前,父對象或子對象的更新不應保存到數據庫。我是asp.net網頁表單和實體框架需要Web表單編輯父子實體對象的示例

作爲一個簡單的例子,設想一個Project對象包含一個Resources集合。我正在構建一個頁面,允許用戶在DetailsView中更改項目屬性(如ProjectName),並在下面的Gridview中添加/編輯/刪除資源。底部的一個保存按鈕可保存所有內容。

我在MVC中發現了這樣的例子,但是在找到一個web表單的例子時遇到了問題。

+0

我沒有做過這個模式,但一個想法是保存子視圖狀態改變的數據,直到主數據去保存,然後將它們保存在一起。 – Aristos

回答

0

我無法爲您編寫您的應用程序,但是我已經使用相同模式的兩種變體之一完成了此操作。

爲您的孩子創建一個可序列化的記錄對象,並在一個基於ViewState的列表中維護它。如果數據非常大,請考慮將其保留在Session中,並使用Session對象的唯一鍵(例如在Page_Load中分配的GUID)並將該鍵存儲在ViewState中。

當您使用完成編輯父/子時,您必須將已更改爲您的基於ViewState/Session的對象解析爲存儲在磁盤上的對象。

+0

我能夠得到這個使用ViewState的工作,正如你所建議的那樣存儲我的實體對象。最大的挑戰是我試圖爲Gridview和DetailsView使用EntityDataSource。這不起作用,我最終使用直接實體對象作爲數據源並在更新事件中對值賦值進行編碼。 – OffTheRadar

+0

正確,當與數據庫斷開連接時,沒有任何標準數據源可用。觀看你的視圖狀態大小。如果它開始成爲一個問題,考慮將您的臨時數據存儲轉移到基於密鑰的密鑰進行會話。 – andleer