Как передать аргументы макета в частичное представление? - PullRequest
0 голосов
/ 18 января 2012

Допустим, у меня есть список продуктов.Я хочу отобразить список продуктов от определенного поставщика на странице поставщика.Я также хочу показать полный список продуктов на странице продуктов.Для этого я использую частичное представление

@Html.Partial("_ProductList", Model.Products)

Частичное представление - это просто базовая таблица с несколькими столбцами.

В одном из этих столбцов отображается имя поставщика.На странице продуктов это полезно, но показывать, когда пользователь уже находится на странице поставщика, показывать имя поставщика для каждого отдельного продукта бесполезно.

Что я хочу знать, так это:рекомендуемый способ передачи такого рода конфигурации макета в частичное представление?

Использовать ли аргумент ViewData?

@Html.Partial("_CallList", Model.Calls, new ViewDataDictionary{{"HideCompany", true}})

При выполнении этого я обнаружил, что мне нужно выполнить много приведения типов.в моем частичном представлении, и это действительно портит мои шаблоны.

    @if (!(bool)ViewData["HideCompany"])
    {
    <td>@Html.DisplayFor(modelItem => item.Name)</td>
    }

Кроме того, если я хочу поместить свой Paginator в частичное представление, как я могу генерировать URL-адреса без указания actionName?

@Html.PagedListPager(Model, page => Url.Action("Index", new { page = page }));

Имя действия не будет одинаковым, в зависимости от того, какое представление встраивает частичное представление, поэтому это становится другой вещью, которую я должен передать частичному представлению в ViewData.

@Html.Partial("_CallList", Model.Calls, new ViewDataDictionary{{"ActionName", "Details"}, {"HideCompany", true}})

Это становится только уродливее и уродливее.

@Html.PagedListPager(Model, page => Url.Action((string)ViewData["ActionName"], new { page = page }));

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

Спасибо

1 Ответ

2 голосов
/ 18 января 2012

Это использовать аргумент ViewData?

Как вы уже видели, это было бы просто ужасно.

Я хочу знать следующее: каков рекомендуемый способ пройти это вид конфигурации компоновки для частичного просмотра?

Используя модель вида, конечно:

public class ProductsViewModel
{
    public IEnumerable<Product> Products { get; set; }
    public bool HideCompany { get; set; }
    public string PageAction { get; set; }
}

, а затем:

public class MainViewModel
{
    public ProductsViewModel Products { get; set; }
}

, а затем:

@Html.Partial("_ProductList", Model.Products)

, а затем:

@if (Model.HideCompany)
{
    <td>@Html.DisplayFor(modelItem => item.Name)</td>
}

и затем:

@Html.PagedListPager(
    Model.Products, 
    page => Url.Action(Model.ActionName), new { page = page })
)

и так далее ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...