Мне нужно сгенерировать навигацию, в которой есть «Система» и «Категория», архонты или кнопки.Система и категория используют один и тот же контроллер.Я хотел бы использовать [Route()]
вместо Startup
файла для маршрутизации.
Для категории Archon прекрасно работает:
<a asp-area="Admin" asp-controller="@value.Controller" asp-action="@Constants.Route.List" asp-route-valueId="@value.ValueId">@value.Value</a>
, но я не знаю, как использовать тот же контроллер для'admin / system / list' вместо admin / categorytype / list, пока я пробовал:
1)
<a asp-area="Admin" asp-route="System" asp-action="@Constants.Route.List" asp-route-valueId="@value.ValueId">@value.Value</a>
2)
<a asp-route="Admin/System/List" asp-route-valueId="@value.ValueId">@value.Value</a>
и на контроллере
[Area("Admin")]
[Route("Admin/[controller]")]
[Route("Admin/System")]
[Authorize]
public class CategoryTypeController : Controller {}
[Route("[action]")]
public ViewResult List(int valueId) {}
3)
<a href="@Url.RouteUrl("SystemValue", new { valueId = value.ValueId })">@value.Value</a>
и наконтроллер
[Area("Admin")]
[Route("Admin/[controller]")]
[Route("Admin/System", Name = "SystemValue")]
[Authorize]
public class CategoryTypeController : Controller {}
[Route("[action]")]
public ViewResult List(int valueId) {}
ни один из вышеперечисленных маршрутов не сгенерировал URL, который позволяет мне перейти к контроллеру CategoryType и действиям List с помощью / admin / system / list
У меня также есть app.UseMvcWithDefaultRoute();
в Startup
файле.
Редактировать: Когда я ввожу адрес вручную /admin/system/list
- роутер работает, но я не могу сгенерировать такой URL-адрес для кнопки или архона, чтобы соответствовать/admin/system/list
, как на прилагаемой картинке, у архона нет URL
РЕДАКТИРОВАТЬ: Я нашелрешение, но я не доволен этим, получается, что я делаюне понимаю, как работает маршрутизация.Для меня атрибут [Route ()]
- это один из способов определения маршрутов, а app.UseMvc()
- второй.Мне пришлось определять маршруты в двух местах.
в Startup.cs
app.UseMvc(routes =>
{
routes.MapRoute(
name: "SystemValue",
template: "Admin/System/List/{id?}",
defaults: new { area = "Admin", controller = "CategoryType", action = "List" });
});
контроллер
[Area("Admin")]
[Route("Admin/[controller]")]
[Route("Admin/System", Name = "SystemValue")]
[Authorize]
public class CategoryTypeController : Controller
{}
[Route("[action]")]
public ViewResult List(int valueId) {}
view
<a href="@Url.RouteUrl("SystemValue", new { valueId = value.ValueId})">@value.Value</a>
Я все еще буду искать решение, как это сделать, используя только [Route ("")]