2016-06-02 15 views
0

私はMVCを使い始めました。私は注文の作成方法と詳細プロジェクトの作成方法を学んでいます。Mvc 5 - 2 model in view

私はそこにあるすべてのアイテムを含むインベントリも持っていますが、注文の詳細を通じてインベントリからデータを取り出す際に問題が発生しています。

どうすればこの2つを組み合わせることができますか? @model InventoryTest.Models.Inventory.order and @model IEnumerable < InventoryTest.Models.Inventory.Inventories>ビューコード内には?

私はまだ学んでいるように、コードの面倒な構造について謝りますが、私が直面している問題について助言を与えることができればと願っています。

在庫モデル:

public int InventoryID { get; set; } 
public string ItemNo { get; set; } 
public string Item { get; set; } 
public int Quantity { get; set; } 

注文モデル:

public int OrderID { get; set; } 
public DateTime Date { get; set; } 
public int EmployeeID { get; set; } 
public int DepartmentID { get; set; } 

public IEnumerable<SelectListItem> GetEmployee() 
{ 
    var query = db.Employees.Select(c => new SelectListItem 
    { 
     Value = c.EmployeeID.ToString(), 
     Text = c.DisplayName, 
    }); 
    return query.AsEnumerable(); 
} 

public IEnumerable<SelectListItem> GetDeptList() 
{ 
    var query = db.Departments.Select(c => new SelectListItem 
    { 
     Value = c.DepartmentID.ToString(), 
     Text = c.Description, 
    }); 
    return query.AsEnumerable(); 
} 

注文の詳細モデル:私の見解コードに

public int OrderDetailID { get; set; } 
public int Quantity { get; set; } 
public int OrderID { get; set; } 
public int InventoryID { get; set; } 

注文の作成は次のとおりです。

@model InventoryTest.Models.Inventory.Order 

@{ 
    ViewBag.Title = "Order Forms"; 
} 

<h2>Order Forms</h2> 


@using (Html.BeginForm()) 
{ 
    @Html.AntiForgeryToken() 


    <div class="form-horizontal"> 
     <hr /> 
     @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
     <div class="row"> 
      <div class="col-sm-4"> 
       @Html.LabelFor(model => model.EmployeeID, htmlAttributes: new { @class = "control-label col-md-2" }) 

       <div class="col-md-offset-4"> 
        @Html.ValidationMessageFor(model => model.EmployeeID, "", new { @class = "text-danger" }) 

        @Html.DropDownListFor(m => m.EmployeeID, Model.GetEmployee(), "Please Select", new 
       { 
        @style = "width: 200px;height:35px", 
        @class = "input-select", 
        @data_bv_notempty = "true", 
        @data_bv_message = "Please select project." 
       }) 
       </div> 
      </div> 
      <div class="col-sm-4"> 
       @Html.LabelFor(model => model.Department, htmlAttributes: new { @class = "control-label col-md-2" }) 
       <div class="col-md-offset-4"> 
        @Html.ValidationMessageFor(model => model.DepartmentID, "", new { @class = "text-danger" }) 

        @Html.DropDownListFor(m => m.DepartmentID, Model.GetDeptList(), "Please Select", new 
       { 
        @style = "width: 200px;height:35px", 
        @class = "input-select", 
        @data_bv_notempty = "true", 
        @data_bv_message = "Please select project." 
       }) 
       </div> 
      </div> 
     </div> 
    </div> 

     <hr /> 
} 
<br /> 

<h4>Item Listing</h4> 

<table class="table table-hover"> 
    <tr> 
     <th>S/N</th> 
     <th>Item No.</th> 
     <th>Item</th> 
     <th>Quantity</th> 
    </tr> 


*//I want to use foreach to populate the data here* 
     <tr> 
      <td></td> 
      <td></td> 
      <td></td> 
      <td></td> 
      <td></td> 
     </tr> 

</table> 
<div> 
    @Html.ActionLink("Back to List", "Index") 
</div> 

@section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
} 

答えて

1

ビューモデルクラスを作成します。

public class OrderAndInventoryViewModel 
{ 
    public Order OrderInfo { get; set; } 
    public IEnumberable<Inventories> InventoryInfo { get; set; } 
} 

そして、あなたのビューでは、使用:

@model <your namespace goes here>.OrderAndInventoryViewModel 

はあなたのコントローラでOrderAndInventoryオブジェクトに適切な順序や在庫情報を割り当て、にそれを渡しますビュー。

+0

適切な注文と在庫情報をコントローラに割り当てる例を教えてください。 – MrTofu

+0

どのようなコントローラー方式ですか?注文を表示しますか?注文を作成しますか? – DavidS

+0

注文を作成します。私はコントローラからモデルのプロパティを呼び出す方法がわかりません。足場の例から分かるように、彼らはdb.xxx.Add(xxx)を使用しました。注文を作成するのではなく、新しいビューモデルクラスを作成してからです。モデルの特性をどのように呼び出すのかを知りたい。 – MrTofu

0

"OrderViewModel"のような新しいオブジェクトを作成する方法があります。そのオブジェクトには、OrderとInventoryのリストが含まれている可能性があります。そして、次にビューの上部に@modelビューで

@model InventoryTest.Models.Inventory.OrderViewModel 

だろう

namespace InventoryTest.Models.Inventory { 
    public class OrderViewModel { 
     public Order order { get; set; } 
     public IEnumerable<InventoryTest.Models.Inventory.Inventories> inventories { get; set; } 
    } 
} 

、あなたは...

として社員にアクセスすることができます...ビューにOrderViewModelを渡します
Model.order.EmployeeID