2009-08-19 77 views
2

我正在寫一個MVC應用程序。需要打開同一頁面的多個實例,每個實例訪問數據庫中的不同記錄,這些記錄對象還需要在頁面流中傳遞,然後才能最終更新。使用MVC自定義模型綁定器?

什麼是最好的,最正確的,acheiving這種方式 - 應/我可以創建一個鏈接到一個對象通過它的唯一的ID,然後在會話中創建的每個記錄對象,更新他們作爲我的自定義模型綁定瀏覽每個人的頁面流,然後調用更新方法?還是有更好的方法來處理這個問題?

乾杯

MH

+0

你是指「同一頁面的多個實例」?他們有完全一樣的網址? 你不能在URL中擁有對象的ID嗎? – 2009-08-19 11:32:56

+0

「頁面的多個實例」我的意思是頁面需要多次打開,每個頁面都加載一個不同的對象進行編輯 – 2009-08-21 08:58:34

+0

是否有可能擁有一個URL,如www.mydomain.com/EditProduct/Step1/ [ID]' ? – 2009-08-24 11:42:57

回答

2

從技術上來說,這將是可能的,但我不認爲這是明智的。當您查看IModelBinder的簽名時,如果您希望能夠訪問應用程序的其他上下文(例如,如何基於ID對對象進行脫水),您將不得不跳過與ControllerContext相關的一些環節。

這是可能的,但如此笨重,你應該考慮是否它是正確的方法。在我看來,ModelBinder的職責是將HTTP請求數據映射到強類型對象。沒有什麼比這更簡單 - 它完全是一個映射器,試圖讓它做得更多就會打破單一責任原則。

這聽起來像你需要一個應用程序控制器 - 基本上,一個類,編排視圖和底層模型的狀態。您可以在Patterns of Enterprise Application Architecture中閱讀有關應用程序控制器設計模式的更多信息。

由於Web應用程序本質上是無狀態的,因此您需要一個地方來存儲應用程序的中間狀態。無論您使用會話還是定製的持久存儲,都取決於應用程序的要求和中間數據的一般複雜性。

+0

感謝您的回覆 - 好吧,這很好,模型粘合劑不是我需要使用的嗎? 下面是我需要做的一個粗略的想法。我將有一堆對象(包括主表記錄,其他各種表格掛在它上面,其中有一些是1 <--> 1,有些則是1 <-->)。在更改提交之前,每個人都必須經歷多達3個屏幕,例如,在編輯過程中。用戶將同時編輯記錄,因此每個用戶都將在新的瀏覽器窗口/選項卡中從主搜索表中打開。 – 2009-08-21 09:00:06

+0

所以說我們有3個數據對象的實例,A,B和C.以及3個屏幕,1,2和3.用戶可以打開A並轉到屏幕1,然後3,並且更改得到更新。然後他們可以打開B並轉到屏幕1,打開C並轉到屏幕1,然後C-> 2。然後B-> 2。然後A-> 1,A-> 3(保存更改)。然後C-> 3(保存)。然後在B上按下取消按鈕,放棄對其的更改。所以我有幾個實例在我的數據對象被同一時間全部編輯的過程中,所以我需要將它們存儲在它們各自的狀態中,直到它們的更改被提交回數據庫。 – 2009-08-21 09:01:39

+0

恐怕,你在那裏迷失了我。一般來說,如果中間狀態不是域模型的一部分,我不會明確地建模它的持久性。相反,我只是將中間狀態序列化並將其保存在某處(自定義數據庫,SQL Server會話狀態或其他)。 – 2009-08-21 10:55:46