将属性从模型复制回对象 - 显式复制或迭代属性集合?

时间:2012-10-04 18:21:05

标签: c# asp.net-mvc

我正在拍摄一个对象并将其属性写入模型,然后在我的视图中显示该模型以进行编辑。然后,用户点击提交并将模型发回给我的控制器。我现在想要获取模型的属性并将它们写回对象。

我正在考虑使用反射这样做,但我有点谨慎。以为我会检查是否有更明显的答案。

代码:

//OrderDetailsModel
public OrderDetailsModel(Order order)
{
    CompletionDateTime = order.CompletionDateTime;
    CreateDateTime = order.CreateDateTime;
    UpdateDateTime = order.UpdateDateTime;
    BusinessArea = order.BusinessArea;
    Comment = order.Comment;
    CostCenter = order.CostCenter;
    CreateUsername = order.CreateUsername;
    Customer = order.Customer;
    IncidentNumber = order.IncidentNumber;
    OrderID = order.ID;
    OrderStatus = order.OrderStatus;
    ProjectName = order.ProjectName;
    ProjectNumber = order.ProjectNumber;
    ProjectSubcode = order.ProjectSubcode;
    UpdateUsername = order.UpdateUsername;
    Description = order.Description;
}

//OrdersController
public ActionResult SaveOrderDetails(OrderDetailsModel orderDetailsModel)
{
    Order order = WorkflowManager.GetOrderByID(orderDetailsModel.OrderID);

    foreach(PropertyInfo propertyInfo in orderDetailsModel.GetType().GetProperties)
    {
         //Write properties back.
    }

    return null;
}

关于如何做到这一点的想法?

4 个答案:

答案 0 :(得分:2)

看看AutoMapper。它简化了这个左手的右手编码。

以下是一个例子:

Mapper.CreateMap<Order, OrderDetailsModel>();
OrderDetailsModel dto = Mapper.Map<Order, OrderDetailsModel >(order);

答案 1 :(得分:1)

使用Automapper。它使用相同的名称映射属性,而无需任何自定义编码。您可以使用NuGet将它添加到Visual Studio中的项目中。

答案 2 :(得分:1)

您可以使用AutoMapper模式来完成此映射。

Nota:你在github上有项目和库

链接:https://github.com/AutoMapper/AutoMapper

答案 3 :(得分:0)

您还应该查看ValueInjecter

在使用Automapper和ValueInjecter之后,我会说ValueInecter绝对更容易使用。在您想要从一个对象映射到另一个对象之前,它也不需要预先完成任何设置。只要属性名称匹配,您就可以使用默认功能。它还支持展平和不展平。

以下是一个例子:

myObject.InjectFrom(anyOtherObject);

在引用程序集后不要忘记包含using语句:

using Omu.ValueInjecter;

感谢。