2010-01-14 32 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