调用不同列表的最佳实践

时间:2016-05-26 05:17:41

标签: c# asp.net-mvc

现在我将对象调用_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 View

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

这是正确的方法,还是有其他最好的方法?

提前致谢!

1 个答案:

答案 0 :(得分:1)

您可以创建一个通用操作,根据您想要的子类别返回列表。然后将它作为路径数据从视图传递给控制器​​。

<强>控制器:

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

您可能需要更改路线配置以匹配此路线。