注文ヘッダー情報を表示するビューを作成し、明細項目のグリッドを表示する部分ビューを追加する必要があります。部分ビューは、ビューモデルから厳密に型指定されます。HTML ヘルパー @Html.Partial("Path/view") を使用する必要があることは理解しています。これまでは、ビューを開いてビューモデルにデータを入力してからビューに送信するためにコントローラーのみを使用してきました。部分ビューは HTML ヘルパーから呼び出されるため、部分ビューにモデル データを入力する最適な方法を知りたいと思います。
ベストアンサー1
オプション 1: 親ページから継承する
デフォルトでは、呼び出しによってレンダリングされる部分ビューは、@Html.Partial("PartialViewName")
親ビューに渡されるビュー モデルを取得します。
したがって、次のような場合:
モデルを表示
namespace MyNamesapce
{
public OrderInfoViewModel
{
public string OrderTitle { get; set; }
public IEnumerable<OrderItem> OrderItems { get; set; }
}
}
注文情報.cshtml
@model MyNamespace.OrderInfoViewModel
<h1>@Model.OrderTitle</h1>
@Html.Partial("OrderLineItems")
OrderLineItems ページMyNamespace.OrderViewModel
に渡されるはずです...そのため、部分ビューは次のようになります。
注文明細項目.cshtml
@model MyNamespace.OrderInfoViewModel
foreach (var orderItem in Model.OrderItems)
{
//Do stuff
}
オプション2: モデルを指定する
2番目のパラメータを使用して、渡すビューモデルを指定できます。つまり、
注文情報.cshtml
@model MyNamespace.OrderInfoViewModel
<h1>@Model.OrderTitle</h1>
@Html.Partial("OrderLineItems", Model.OrderItems)
注文明細項目.cshtml
@model IEnumerable<OrderItem>
foreach (var orderItem in Model)
{
//Do stuff
}
オプション3: 部分的なアクションを使用する
複数のページで部分ビューを再利用する必要がある場合は、ページで同じ部分を使用するという理由だけで、異なるビュー モデルに同じ情報を入力する必要がなくなるように、部分ビューを使用することをお勧めします。
例えば
モデルを表示
namespace MyNamesapce
{
public OrderInfoViewModel
{
public string OrderTitle { get; set; }
}
}
コントローラ
public class OrderController : Controller
{
public ActionResult OrderInfo(int orderId)
{
OrderInfoViewModel viewModel = GetViewModel(orderId);
return View(viewModel);
}
public PartialViewResult OrderLineItems(int orderId)
{
IEnumerable<OrderItem> orderItems = GetOrderItems(orderId);
return Partial(orderItems);
}
}
注文情報.cshtml
@model MyNamespace.OrderInfoViewModel
<h1>@Model.OrderTitle</h1>
@Html.Action("OrderLineItems")
注文明細項目.cshtml
@model IEnumerable<OrderItem>
foreach (var orderItem in Model.OrderItems)
{
//Do stuff
}