Model view controller 模型数据类型与视图控件

Model view controller 模型数据类型与视图控件,model-view-controller,Model View Controller,当model属性的数据类型与我希望在表单中显示的数据类型大不相同时,我在MVC的设计模式上遇到了一些麻烦。我不确定逻辑应该放在哪里 意识到我不确定如何问这个问题,我想我会把它作为一个具体的例子来解释 我有一个发票表,第二个表包含发票详细信息。每个InvoiceDetail项目都有一个负责批准费用的所有者。给定的发票有一个或多个最终将在所有明细行上签字的人员,以便可以批准发票。该网站正在建设中,以提供审批功能 在数据库中,我存储批准行项目的人员的员工id。此架构为我提供了一个模型,该模型具有App

当model属性的数据类型与我希望在表单中显示的数据类型大不相同时,我在MVC的设计模式上遇到了一些麻烦。我不确定逻辑应该放在哪里

意识到我不确定如何问这个问题,我想我会把它作为一个具体的例子来解释

我有一个发票表,第二个表包含发票详细信息。每个InvoiceDetail项目都有一个负责批准费用的所有者。给定的发票有一个或多个最终将在所有明细行上签字的人员,以便可以批准发票。该网站正在建设中,以提供审批功能

在数据库中,我存储批准行项目的人员的员工id。此架构为我提供了一个模型,该模型具有Approved列的String属性

但是,我希望在网站上提供一个复选框,供员工单击以表示他们批准行项目

我想我的问题是,我该怎么处理?传递给视图的模型具有字符串属性,但传递回控制器的表单值将为复选框类型。我看到两种可能的方法

1) 创建一个新的模型对象来表示表单字段…比如说FormInvoiceDetails…并让业务逻辑查询数据库,然后将结果转换为其他类型。然后在提交表单后,需要将表单值转换回,以便更新原始模型对象

2) 将原始InvoiceDetails集合传递给视图,并让代码根据String属性的值创建并呈现复选框。我仍然不确定如何处理提交,因为我仍然需要将表单值映射回底层数据库对象

如果不是这两种方法中的一种,也许还有第三种方法

为了使情况更加复杂(或者可能不复杂),我正在呈现表单,以允许编辑多行(即集合)


感谢任何人提供的见解。

我相信您正在寻找的是ViewModel

在使用ViewModel的情况下,可以设计ViewModel以匹配需要在页面上显示的确切数据

然后使用控制器将数据从模型填充并映射到ViewModel,然后再映射回ViewModel


有一些非常好的使用ViewModels的示例。

您需要一个ViewModel,如建议的那样

控制器从数据库加载完整的模型,只将所需的字段复制到ViewModel中,然后将ViewModel交给视图进行渲染

我用它来做从模型到视图模型的转换。它自动化了所有繁琐的
thingA.x=thingY.x代码


.

书呆子晚餐中的例子,以及我在网上看到的例子,似乎都与向视图传递附加数据有关,而不是转换要显示的数据。但是,您建议使用ViewModels似乎是最好的解决方案。谢谢