2016-05-26 69 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" }) 

您可能需要改变你的路线配置来匹配这条路线。