注文ヘッダー情報を表示するビューを作成する必要があり、品目のグリッドを表示する空間ビューを追加する必要があります。部分ビューは、ビューモデルから厳密に型指定されます。HTML ヘルパー @Html.Partial("Path/view") を使用する必要があることを理解しています。今までコントローラーを使用してビューを開き、ビューに送信する前にビューモデルにデータを入力していました。部分ビューは html ヘルパーから呼び出されているため、部分ビューにモデル データを入力する最良の方法を教えてください。
2 に答える
オプション 1: 親ページから継承する
デフォルトでは、呼び出しによってレンダリングされた部分ビューは@Html.Partial("PartialViewName")
、親ビューに渡されたビュー モデルを取得します。
あなたが持っている場合:
モデルを見る
namespace MyNamesapce
{
public OrderInfoViewModel
{
public string OrderTitle { get; set; }
public IEnumerable<OrderItem> OrderItems { get; set; }
}
}
OrderInfo.cshtml
@model MyNamespace.OrderInfoViewModel
<h1>@Model.OrderTitle</h1>
@Html.Partial("OrderLineItems")
OrderLineItems ページはMyNamespace.OrderViewModel
それに渡される必要があります...したがって、部分ビューは次のようになります。
OrderLineItems.cshtml
@model MyNamespace.OrderInfoViewModel
foreach (var orderItem in Model.OrderItems)
{
//Do stuff
}
オプション 2: モデルを指定する
2 番目のパラメーターを使用して、渡すビュー モデルを指定できます。いえ
OrderInfo.cshtml
@model MyNamespace.OrderInfoViewModel
<h1>@Model.OrderTitle</h1>
@Html.Partial("OrderLineItems", Model.OrderItems)
OrderLineItems.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);
}
}
OrderInfo.cshtml
@model MyNamespace.OrderInfoViewModel
<h1>@Model.OrderTitle</h1>
@Html.Action("OrderLineItems")
OrderLineItems.cshtml
@model IEnumerable<OrderItem>
foreach (var orderItem in Model.OrderItems)
{
//Do stuff
}
部分ビューでは、通常のビューと同じようにモデルを送信するだけです。たとえば、モデルに「LineItems」という名前の LineItem オブジェクトのプロパティがある場合は、次のようにします。
@Html.Partial("_PartialName", Model.LineItems)
モデルにそのプロパティがない場合は、それを追加するか、ViewBag のような別の方法で渡すことができます (厳密に型指定されたメソッドを好みますが、それが私の意見です:
@Html.Partial("_PartialName", (List<LineItem>)ViewBag.LineItems)
これらは唯一の方法ではありませんが、私の好みの方法です。