28

注文ヘッダー情報を表示するビューを作成する必要があり、品目のグリッドを表示する空間ビューを追加する必要があります。部分ビューは、ビューモデルから厳密に型指定されます。HTML ヘルパー @Html.Partial("Path/view") を使用する必要があることを理解しています。今までコントローラーを使用してビューを開き、ビューに送信する前にビューモデルにデータを入力していました。部分ビューは html ヘルパーから呼び出されているため、部分ビューにモデル データを入力する最良の方法を教えてください。

4

2 に答える 2

52

オプション 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
}
于 2012-12-07T19:52:27.997 に答える
6

部分ビューでは、通常のビューと同じようにモデルを送信するだけです。たとえば、モデルに「LineItems」という名前の LineItem オブジェクトのプロパティがある場合は、次のようにします。

@Html.Partial("_PartialName", Model.LineItems)

モデルにそのプロパティがない場合は、それを追加するか、ViewBag のような別の方法で渡すことができます (厳密に型指定されたメソッドを好みますが、それが私の意見です:

@Html.Partial("_PartialName", (List<LineItem>)ViewBag.LineItems)

これらは唯一の方法ではありませんが、私の好みの方法です。

于 2012-12-07T19:28:40.917 に答える