2012-01-18 53 views
0

比方说,我有一个产品列表。我想在供应商页面上显示某个供应商的产品列表。我还想在产品页面上显示产品的完整列表。对此,我使用的是局部视图如何将布局参数传递给部分视图?

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

局部视图只是一堆列的基本表。

其中一个栏显示供应商名称。在产品页面,这是有用的,但展现在用户已经是供应商的页面上,显示了每一个产品的供应商名称是没有用的。

我想知道的是:什么是这种布局配置的传递到局部视图的推荐方法?

是否使用ViewData的参数?

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

当我这样做时,我发现我必须在我的局部视图中进行大量的投射,并且它真的会弄乱我的模板。另外,如果我想在部分视图中放置我的Paginator,如何在不指定actionName的情况下生成URL?

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

操作名称不会是相同的,这取决于视图嵌入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 })); 

在以前的框架中,我没有指定动作名称,只是使用当前活动的动作。

感谢

回答

2

是否使用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 }) 
) 

等等...