2016-05-26 35 views
1

現在我打電話對象變成_layout菜單與PartialView這樣的:最佳實踐來調用不同的列表

控制器:

public async Task<ActionResult> GetChemicalsList() 
{ 
    var model = db.ProductsList.Where(x => x.Subcategory.Name == "Chemicals").ToList(); 
    return PartialView(@"~/Views/Product/_ChemicalPartialView.cshtml", model); 
} 

管窺:

@model IEnumerable<Product> 

@foreach (var item in Model) 
{ 
    <a href="@Url.Action("Index", "Product", new { id= item.ProductId})">@Html.DisplayFor(modelItem => item.Name)</a> 
} 

佈局視圖:

<div class="col-xs-6 col-sm-2"> 
    @Html.Action("GetChemicalsList", "Product") 
</div> 

但我有另一個產品與不同的子類別添加,所以我需要做一個控制器和不同的調用到每個視圖,因爲每個人都有不同的控制器查詢:例如,我做了另一個配件,所以我的控制器是這樣的一個:

配件控制器:

public async Task<ActionResult> GetAccesoriesList() 
{ 
    var model = db.ProductsList.Where(x => x.Subcategory.Name == "Accesories").ToList(); // diferent Query 
    return PartialView(@"~/Views/Product/_ChemicalPartialView.cshtml", model); 
} 

_layout查看

<div class="col-xs-6 col-sm-2"> 
    @Html.Action("GetAccesoriesList", "Product") 
</div> 

是正確的方法來做到這一點,或有另一種最好的方法?

提前致謝!

+1

你可以使用一個帶有'Subcategory.Name'參數的方法來說'public Async Task Fetch(string category)'並使用'@ Html.Action(「Fetch」,Product「,new { category =「Accesories」)' –

回答

1

您可以創建一個通用的Action,它將根據您想要的子類別返回您的列表。然後將其從視圖傳遞給控制器​​作爲路由數據。

控制器:

public async Task<ActionResult> GetSubCategoryList(string subCategory) 
{ 
    var model = db.ProductsList.Where(x => x.Subcategory.Name == subCategory).ToList(); 
    return PartialView(@"~/Views/Product/_ChemicalPartialView.cshtml", model); 
} 

查看:

@Html.Action("GetSubCategoryList", "Product", new { subCategory = "Accessories" }) 

您可能需要改變你的路線配置來匹配這條路線。