C# 如何将布局参数传递给局部视图?

C# 如何将布局参数传递给局部视图?,c#,asp.net-mvc,C#,Asp.net Mvc,假设我有一个产品清单。我想在供应商页面上显示某个供应商的产品列表。我还想在产品页面上显示产品的完整列表。为此,我使用的是局部视图 @Html.Partial("_ProductList", Model.Products) 部分视图只是一个包含一组列的基本表 其中一列显示供应商名称。在产品页面上,这是有用的,但是当用户已经在供应商页面上时,显示每个产品的供应商名称并不有用 我想知道的是:将这种布局配置传递给局部视图的推荐方法是什么 是否要使用ViewData参数 @Html.Partial("_

假设我有一个产品清单。我想在供应商页面上显示某个供应商的产品列表。我还想在产品页面上显示产品的完整列表。为此,我使用的是局部视图

@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>
    }
动作名称将不同,这取决于嵌入partialview的视图,因此它将成为我必须在ViewData中传递给partialview的另一个内容

@Html.Partial("_CallList", Model.Calls, new ViewDataDictionary{{"ActionName", "Details"}, {"HideCompany", true}})
它变得越来越丑陋

@Html.PagedListPager(Model, page => Url.Action((string)ViewData["ActionName"], new { page = page }));
在我以前使用的框架中,我不必指定操作名称,它只使用了当前活动的操作

谢谢

是否要使用ViewData参数

@Html.Partial("_CallList", Model.Calls, new ViewDataDictionary{{"HideCompany", true}})
正如你已经看到的那样,那将是绝对可怕的

我想知道的是:推荐的通过方法是什么 局部视图的布局配置排序

当然,通过使用视图模型:

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 })
)
然后:

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 })
)
等等