我正在拍摄一个对象并将其属性写入模型,然后在我的视图中显示该模型以进行编辑。然后,用户点击提交并将模型发回给我的控制器。我现在想要获取模型的属性并将它们写回对象。
我正在考虑使用反射这样做,但我有点谨慎。以为我会检查是否有更明显的答案。
代码:
//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;
}
关于如何做到这一点的想法?
答案 0 :(得分:2)
看看AutoMapper。它简化了这个左手的右手编码。
以下是一个例子:
Mapper.CreateMap<Order, OrderDetailsModel>();
OrderDetailsModel dto = Mapper.Map<Order, OrderDetailsModel >(order);
答案 1 :(得分:1)
使用Automapper。它使用相同的名称映射属性,而无需任何自定义编码。您可以使用NuGet将它添加到Visual Studio中的项目中。
答案 2 :(得分:1)
答案 3 :(得分:0)
您还应该查看ValueInjecter
在使用Automapper和ValueInjecter之后,我会说ValueInecter绝对更容易使用。在您想要从一个对象映射到另一个对象之前,它也不需要预先完成任何设置。只要属性名称匹配,您就可以使用默认功能。它还支持展平和不展平。
以下是一个例子:
myObject.InjectFrom(anyOtherObject);
在引用程序集后不要忘记包含using语句:
using Omu.ValueInjecter;
感谢。