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

Automapperを使用します。カスタム コーディングなしで同じ名前のプロパティをマップします。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 に答える