В вашем MapRoute нет места для действия, поэтому asp.net всегда будет использовать действие по умолчанию «Индекс».
По умолчанию ваша маршрутизация будет выглядеть так:
routes.MapRoute(" Default", "{controller}"/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
Вам не хватает части действия.
Значения маршрута в вашей ссылке, которые не соответствуют параметрам вашего маршрута, будут параметрами строки запроса. Таким образом, вам нужно изменить «категорию» на «бренд» в вашем маршруте.
Попробуйте это:
routes.MapRoute(null, "Phones/{brand}",
new { controller = "Phones", action = "Index", brand = UrlParameter.Optional });
и
@foreach (string item in ViewBag.Brand)
{
<div>@Html.ActionLink(item, "Index", "Phones", new { brand = item }, null)</div>
}
Обязательно вызовите контроллер явным образом в вашем ActionLink, если текущее представление отображается через другой маршрут, в противном случае оно не распознает параметр brand
.