2010-01-14 24 views
1

當模型屬性的數據類型與我希望在窗體中顯示的數據類型非常不同時,我在MVC的設計模式中纏繞我的頭時遇到了一些麻煩。我不確定邏輯應該在哪裏。模型數據類型與視圖控件

認識到我不是很確定如何問這個問題我想我會把它解釋爲一個具體的例子。

我有一個包含InvoiceDetails的第二個表的發票表。每個InvoiceDetail項目都有負責批准收費的所有者。給定的發票有一個或多個人最終會在所有明細行上簽字,因此可以批准發票。該網站正在建立,以提供審批功能。

在數據庫中,我存儲批准訂單項的人的員工ID。該模式爲我提供了一個包含Approved列的String屬性的模型。

但是,在網站上,我希望爲員工提供一個CheckBox以點擊以表明他們批准訂單項。

我想我的問題是這個 - 我該如何處理?傳遞給View的Model具有String屬性,但傳遞迴Controller的表單值將是CheckBox類型。我看到兩種可能的方法......

1)創建一個新的Model對象來表示表單字段......說出類似FormInvoiceDetails的內容......並讓業務邏輯查詢數據庫,然後將結果轉換爲另一個類型。然後在提交之後,表單值需要被轉換回原來的Model對象才能被更新。

2)將原始InvoiceDetails集合傳遞給View,並在那裏創建代碼,根據String屬性的值創建複選框。我仍然不確定如何處理提交,因爲我仍然需要將表單值映射回底層數據庫對象。

也許有第三種方法,如果不是這兩種方法之一?

爲了讓情況更復雜一點(或者它可能沒有),我渲染表單以允許編輯多行(即集合)。

謝謝任何​​人都可以提供的見解。

回答

1

我相信你正在尋找的是ViewModel。

在您使用ViewModel的情況下,您可以設計ViewModel以匹配您需要在頁面上顯示的確切數據。

然後,您可以使用您的控制器來填充數據,並將您的數據從您的模型映射到您的ViewModel,然後再返回。

Nerd Dinner ASP.NET MVC Example有一些很好的使用ViewModels的例子。

+0

書呆子晚宴中的例子,以及我在網上看到的例子,都似乎與傳遞額外的數據到View相關,而不是轉換要顯示的數據。但是,您使用ViewModels的建議似乎是最佳解決方案。謝謝。 – Jason 2010-01-27 18:00:11