2016-05-26 3 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> 
} 

Layout View:

<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' say' public async Task Fetch (строка category) 'и использовать' @ Html.Action («Fetch», Product », new { category = "Принадлежности") ' –

ответ

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

Вы, возможно, потребуется изменить маршрут конфигурации, чтобы соответствовать этому маршруту.

Смежные вопросы