0

各モデルがDBテーブルを表す単一のビューで複数のモデルを使用する方法を誰かが私に説明できますか?

私が現在行っているのは、モデルごとにモデルファイルを作成することです。

モデルの例:

[Table("Order")]
public class OrderModel
{
    [Key, Column(Order = 0)]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int OrderID { get; set; }

    [Key, Column(Order = 1)]
    public int UserID { get; set; }
    public UserProfile Account { get; set; }

    public DateTime Date { get; set; }
    public int ShipLocation { get; set; }
    public string PONumber { get; set; }

    public int StatusID { get; set; }
    public StatusModel Status { get; set; }
}

これは、単一のコントローラー/ビューで使用するすべてのモデルを含むもう1つのモデルです。

public class OrderPlacementModel
{
    public OrderModel OrderChild { get; set; }
    public OrderItemsModel OrderItemsChild { get; set; }
    public StatusModel StatusChild { get; set; }
    public MaterialsModel MaterialsChild { get; set; }
    public CategoryModel CategoryChild { get; set; }
    public PackModel PackChild { get; set; }
}
4

2 に答える 2

1
public ActionResult PlaceOrder()
{
  var viewModel = new OrderPlacementModel
  {
    OrderChild = new OrderModel(),//or fetch this object from your data source
    OrderItemsChild = new OrderItemsChild(),
    //...etcetera
  };
  return View(viewModel);
}

編集

または、ビューをList<OrderPlacementModel>単一のインスタンスではなく強く入力した場合は、次のようなことを行うことができます。

public ActionResult PlaceOrder()
    {
      var viewModel = new List<OrderPlacementModel>();
      var model = new OrderPlacementModel
      {
        OrderChild = new OrderModel(),//or fetch this object from your data source
        OrderItemsChild = new OrderItemsChild(),
        //...etcetera
      };
      viewModel.Add(model);
      //lather, rinse, repeat for however many instances you need to send to your view.
      return View(viewModel);
    }
于 2013-02-04T19:01:28.117 に答える
0

理想的には、ビューを介して公開する必要がある各モデルのフィールドを含むビューのビューモデルを作成する必要があります。次に、これらをコントローラーにマップできます。私はあなたのマッピングクラスがあなたのビューモデルを完全に知らないようにしておきます。ビューをデータモデルから独立させてください。

public class OrderViewModel
{
    public int OrderId { get; set; }
    public int UserId { get; set; }
    public DateTime Date { get; set; }
    public int ShippingLocation { get; set; }

    public List<ItemViewModel> Items { get; set; }
}

public class ItemViewModel
{
    public int ItemId { get; set; }
    public int Title { get; set; }
}

注文のビューモデルを作成し、注文に複数のアイテムを含めることができるように、これらを個別のモデルクラスに分離したことに注意してください。これで、ビューを入力して、必要なOrderViewModel数のインスタンスを使用できItemViewModelます。

次に、コントローラーからビューモデルをデータベースエンティティにマップできます。

[HttpPost]
public ActionResult ConfirmOrder (OrderViewModel model)
{
    if (ModelState.IsValid)
    {
        foreach (ItemViewModel item in model.Items)
        {
            /* Create instance of OrderItemsModel (or whatever your
            DB mapping class is), populate with appropriate data
            from 'item' and commit to database. */
        }

        OrderModel order = new OrderModel();
        order.OrderId = model.OrderId;
        order.UserId = model.UserId;
        order.Date = model.Date;
        order.ShipLocation = model.ShippingLocation;

        /* TODO: Commit new order to database */

    }
}

この方法で行うと、初期開発時間に少しオーバーヘッドが追加されますが、すべてのビューをエンティティクラスの形状に成形する必要がないため、柔軟性が大幅に向上します。

于 2013-02-04T21:19:10.300 に答える