2012-01-18 145 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 }) 
) 

等等...

相關問題