Подтвердить что ты не робот

Как заполнять частичный вид бритвы mvc

Мне нужно создать представление, которое отображает информацию заголовка заказа, и мне нужно добавить палитический вид, отображающий сетку позиций. Частичный вид будет строго типизирован из viewmodel. Я понимаю, что я должен использовать html helper @Html.Partial( "Путь/представление" ). Я только использовал контроллеры до сих пор, чтобы открыть представление, заполнив viewmodel перед отправкой его в представление. Поскольку частичный вид называется формой html-помощником, я хотел бы знать, что было бы лучшим способом заполнить представление parital с помощью данных модели.

4b9b3361

Ответ 1

Вариант 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: укажите модель

Вы можете использовать второй параметр, чтобы указать модель представления, которую нужно передать. То есть.

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
}

Ответ 2

С частичным представлением вы просто отправляете модель так же, как и с обычным представлением. Например, если ваша модель имеет свойство объектов LineItem с именем "LineItems", вы просто сделаете это:

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

Теперь, если ваша модель не имеет этого свойства, вы можете либо добавить ее, либо передать ее другим способом, например ViewBag (я предпочитаю строго типизированный метод, но это мое предположение:

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

Это не единственные пути, но они - мои предпочтительные методы.