2

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

我正在考虑使用反射来做到这一点,但我有点警惕。以为我会检查是否有更明显的答案。

代码:

//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

4 回答 4

2

看看AutoMapper。它使这种左手<->右手编码的工作变得很短。

这是一个例子:

Mapper.CreateMap<Order, OrderDetailsModel>();
OrderDetailsModel dto = Mapper.Map<Order, OrderDetailsModel >(order);
于 2012-10-04T18:23:55.470 回答
1

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

于 2012-10-04T18:24:41.723 回答
1

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

注意:您在 github 上有项目和库

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

于 2012-10-04T18:26:59.067 回答
0

您还应该看看ValueInjecter

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

这是一个例子:

myObject.InjectFrom(anyOtherObject);

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

using Omu.ValueInjecter;

谢谢。

于 2012-10-04T19:32:09.223 回答