Как указать asp-действие, но не отображать его в URL - PullRequest
0 голосов
/ 30 января 2019

У меня есть контроллер:

public class StaffController
{
    [HttpGet("staff/{id}")]
    public async Task<IActionResult> GetStaffMembers(int id)
    {
        return View("Staff", new StaffViewModel(id));
    }
}

, который я хочу запустить по ссылке:

<a asp-controller="Staff" asp-action="GetStaffMembers" asp-route-id="@Model.Id">Click here for @Model.Id</a>

Это маршрутизация на staff/getstaffmembers/1

Использование aspатрибуты якоря, как я могу сделать это перейти к staff/1?


Примечание:
Я уже знаю, что могу использовать <a href="/staff/@Model.Id" ... и хотел бы вместо этого найти правильный синтаксис для атрибутов asp-*.

1 Ответ

0 голосов
/ 30 января 2019

Интересно.С явным атрибутом маршрута, примененным к действию, это не должно происходить.По сути, кажется, что он возвращается к маршруту по умолчанию.Обычно определение префикса маршрута на уровне контроллера является обычным, поэтому, возможно, это позволит разобраться:

[Route("staff")]
public class StaffController
{
    [HttpGet("{id}")]
    public async Task<IActionResult> GetStaffMembers(int id)
    {
        return View("Staff", new StaffViewModel(id));
    }
}

В качестве альтернативы, вы можете просто дать вашему маршруту имя и затем явно сослаться на него:

[HttpGet("staff/{id}", Name = "GetStaffMembers")]

Тогда:

<a asp-route="GetStaffMembers" asp-route-id="@Model.Id">...</a>

Последнее, что может быть проблемой, которая как бы связана с первой.Поскольку у вашего контроллера нет явного маршрута, он может не найти правильный маршрут правильно.Создание абсолютного значения может помочь:

[HttpGet("~/staff/{id}")]

По сути, это означает, что этот маршрут должен быть просто /staff/{id} независимо от того, что еще происходит с маршрутизацией или моим контроллером.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...